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)

Lintcode-Ladder

Method

  1. Binary Search
  2. x

Example

  1. 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

results matching ""

    No results matching ""