35. Search Insert Position
肯定一看就是二分搜索。问题在于数列中并没有找到这个数的情况
当退出的时候,如果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