肯定一看就是二分搜索。问题在于数列中并没有找到这个数的情况
当退出的时候,如果nums[mid] < target的时候,说明刚才退出时因为改变了low,导致low > high所以退出了循环,所以就直接返回low
如果nums[mid] > target,说明因为改变了high退出的,所以结果是high这个位置的后面那个可以插入
考虑到如果是-1这种情况就是查在对头,所以把-1纠正成0
1 public int searchInsert(int[] nums, int target) { 2 if(nums == null || nums.length == 0) { 3 return -1; 4 } 5 int low = 0; 6 int high = nums.length - 1; 7 int mid = 0; 8 9 while(low <= high) {10 mid = low + (high - low) / 2;11 if(nums[mid] < target) {12 low = mid + 1;13 } else if(nums[mid] > target) {14 high = mid - 1;15 } else {16 return mid;17 }18 }19 int res = 0;20 if(nums[mid] > target) {21 res = high + 1;22 } else {23 res = low;24 }25 return (res < 0)? 0: res;26 }
bug记录:
21行 res = high + 1而不是high