Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
You may assume no duplicates in the array.
Here are few examples.
[1,3,5,6]
, 5 → 2
[1,3,5,6]
, 2 → 1
[1,3,5,6]
, 7 → 4
[1,3,5,6]
, 0 → 0
最后究竟是返回low还是high最好是找个例子测试下
注意二分查找的几个重点 high = length -1 while(low <= high)
除此之外,在数组比较大的时候 计算mid的low+high可能会产生溢出 所以要习惯用mid = low + ((high - low)>>1);
Source
public class Solution {
public int searchInsert(int[] A, int target) {
int low = 0, high = A.length - 1;
while(low <= high){
int mid = (low + high) / 2;
if(A[mid] < target){
low = mid + 1;
}
else if(A[mid] > target){
high = mid - 1;
}
else return mid;
}
return low;
}
}
Test
public static void main(String[] args){
int[] A = {1,3,5,6};
System.out.println(new Solution().searchInsert(A, 0));
}