http://www.lintcode.com/en/problem/closest-number-in-sorted-array/

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.

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.



public class Solution {
    /**
     * @param A an integer array sorted in ascending order
     * @param target an integer
     * @return an integer
     */
    public int closestNumber(int[] A, int target) {
        // Write your code here
        if (A == null || A.length == 0) {
            return -1;
        }
        int lo = 0;
        int hi = A.length - 1;
        while (lo + 1 < hi) {
            int mid = lo + (hi - lo) / 2;
            if (A[mid] == target) {
                return mid;
            } else if (A[mid] < target) {
                lo = mid;
            } else {
                hi = mid;
            }
        }
        if (Math.abs(A[lo] - target) < Math.abs(A[hi] - target)){
            return lo;
        }
        return hi;
    }
}

results matching ""

    No results matching ""