这题的关键就在于,只是把原704.二分查找中的最后一行return - 1;
换成了return left 或 return right + 1
就已经解决问题了。
其实分情况一一分析,就是这么简单:
1、目标值在数组中,return mid
2、目标值比数组中任何一个值都要小,那其实就是left自始至终没动过,是right不断地向左移动,直至right == left == 0还是找不到,然后就是right = -1 小于 left,跳出循环,return left(left没移动过,一直为0) 或 return right + 1
3、目标值比数组中任何一个值都要大,和第2点原理一样
4、目标值插入数组中,比如nums = [1,3,5,6],target = 2,自己拿纸笔画一画,就懂啦。
class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while(left <= right){
int mid = (left + right) / 2;
if(nums[mid] == target){
return mid;
}else if(nums[mid] < target){
left = mid + 1;
}else if(nums[mid] > target){
right = mid - 1;
}
}
return left;//return right + 1;
}
}