LeetCode - 35. 搜索插入位置
题目
35. 搜索插入位置 - 力扣(LeetCode)
思路
思路很简单,就是正常的二分写法,但是要注意最后的返回值是left而不是right
读者可能出现的错误写法
class Solution {
public:int searchInsert(vector<int>& nums, int target) {int left = 0;int right = nums.size()-1;while(left<=right){int mid = left +(right-left)/2;if(nums[mid] < target){left = mid+1;}else if(nums[mid] > target){right = mid-1;}else if(nums[mid] == target){return mid;}}return right;}
};
主要有一个错误:循环结束后的返回值应该是 left 而不是 right。
在二分查找循环结束后(当 left > right 时):
- left 指向第一个大于等于 target 的位置
- right 指向最后一个小于 target 的位置
对于搜索插入位置问题,我们需要返回的是第一个大于等于 target 的位置,即 left。
正确写法
class Solution {
public:int searchInsert(vector<int>& nums, int target) {int left = 0;int right = nums.size()-1;while(left<=right){int mid = left +(right-left)/2;if(nums[mid] < target){left = mid+1;}else if(nums[mid] > target){right = mid-1;}else if(nums[mid] == target){return mid;}}return left;}
};