1.思路:用二分查找,如果nums[mid] < target,left = mid + 1,否则right = mid - 1;本质上是如果当前元素比目标值要大,插入的位置肯定在他之后,如果比目标值要小,插入的位置在当前位置即可(因为比之前的元素都大,所以肯定不会插在前面),如果等于当前元素,插入到当前元素即可。最后返回left即可。因为二分的条件是left <= right,最后一次肯定是left = mid = right,如果nums[mid] < target,left = mid + 1,也就是插在了当前元素的后一位,如果nums[mid] >= target,right = mid - 1;此时插入的位置就是当前元素,也就是left=mid.所以综合来说,返回left即可。
2.代码
class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
int mid;
while(left <= right){
mid = left + (right - left) / 2;
if(target <= nums[mid] ){
right = mid - 1;
}else{
left = mid + 1;
}
}
return left;
}
}