Closest in Sorted Array
public class Solution {
public int closest(int[] array, int target) {
if (array.length == 0) return -1;
// Move right to first element N > target
// check between N and N - 1 for closer
int left = 0;
int right = array.length - 1;
while (left <= right){
int mid = left + (right - left) / 2;
if (array[mid] == target) return mid;
else if (array[mid] < target) left = mid + 1;
else right = mid - 1;
}
if (left < 1) return 0;
if (left > array.length - 1) return array.length - 1;
//left should end just greater than mid
//check between left and left - 1
if (Math.abs(array[left] - target) < Math.abs(array[left - 1] - target)) return left;
else return right;
}
}Last updated