思路:跟二分查找一样,但是最后找不到目标值的时候要分清楚我们要插入的地方在哪,因为如果我们找不到目标值的时候,我们的right会小于left,通过模拟过程发现,我们需要返回的是left值(right+1的值)。
class Solution {
//题目说时间复杂度是logn所以要用二分查找
public int searchInsert(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
//用左闭右闭的方法,统一左右边界的移动
while(left<=right){
int middle = left + (right - left) / 2;
if(nums[middle] < target){
left = middle + 1;
}else if(nums[middle] > target){
right = middle - 1;
}else{
return middle;
}
}
//这里些right+1也行,因为结束的时候right + 1 = left
//自己模拟一下就知道了,这里可能会卡一下
return left;
}
}
时间复杂度:O(logn)
空间复杂度:O(1)
本文章只做笔记用途,谢谢观看!
参考:代码随想录