使用方法为二分查找(左闭右闭区间),最关键的点是在未搜索到target后,找到插入位置的坐标。
时间复杂度:O(log n),空间复杂度:O(1)
思路:
- 先写一个常规的左闭右闭区间的二分查找,如果找到target就输出,没有找到就移动left,right坐标,直到left>right,说明该数组不含有target
- 此时right和left的坐标的中间就是target需要插入的地方,所以返回坐标right+1或left
代码:
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;
while (left <= right){
int middle = left + (right - left) / 2;
if (nums[middle] == target){
return middle;
}else if (nums[middle] < target){ //在右半区间,移动left
left = middle + 1;
}else if (nums[middle] > target){ //在左半区间,移动right
right = middle - 1;
}
}
return right + 1;
// return left;
}
};