Closest Number in Sorted Array(Ladder)
Description
Given a target number and an integer array A sorted in ascending order, find the index i in A such that A[i] is closest to the given target. Return -1 if there is no element in the array.
Notice:
There can be duplicate elements in the array, and we can return any of the indices with same value.Example
Given [1, 2, 3] and target = 2, return 1.
Given [1, 4, 6] and target = 3, return 1.
Given [1, 4, 6] and target = 5, return 1 or 2.
Given [1, 3, 3, 4] and target = 2, return 0 or 1 or 2.Challenge:
Time complexity in O(logn)Link
Method
- Binary Search
- x
Example
- 1
class Solution { public: /** * @param A an integer array sorted in ascending order * @param target an integer * @return an integer */ int closestNumber(vector<int>& nums, int target) { // Write your code here if (nums.empty()) { return -1; } int start = 0; int end = nums.size()-1; while (start+1 < end) { int mid = start + (end-start)/2; if (target == nums[mid]) { return mid; } else if (target< nums[mid]) { end = mid; } else { start = mid; } } if (abs(nums[start] - target) > abs(nums[end] - target)) { return end; } else { return start; } return -1; } };
Similar problems
x
Tags
x