在一个非递减数组中,找到距离目标值,最近的数组索引。
如 1 2 3 6 7 8 ,目标值为4
返回 2
思路:
可以理解为 先用二分法找到这个目标值,如果找不到,那么就找它应该插入的顺序,判断插入顺序两边的元素谁和目标值近。
public class Main {
public static void main(String [] str){
int [] array = {1,5};
System.out.println(serchInsert(array,4));
}
public static int serchInsert(int[] nums,int target) {
int i = 0,j = nums.length-1;
int mid = 0;
if(target<nums[0]) return 0;
if(target>nums[j]) return nums.length-1;
while(i<=j) {
mid = (i+j)/2;
if(target>nums[mid]) i = mid+1;
if(target<nums[mid]) j = mid-1;
if(target == nums[mid]) return mid;
}
if(i-1<0) return i;
if(Math.abs(nums[i-1]-target)>Math.abs(nums[i]-target)) return i;
else return i-1;
}
}