35. 搜索插入位置
35题链接
https://leetcode-cn.com/problems/search-insert-position/
暴力法:
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
for(int i = 0;i<nums.size();i++){
if(nums[i]>=target) return i;
}
return nums.size();
}
};
二分法
要注意选择的是[left,right]的区间还是[left,right)的区间
第一种[left,right] 代码:
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int n = nums.size();
int left = 0;
int right = n-1; //定义target在左闭右闭的区间里
while(left<=right){
int middle = (left+right)/2;
if(nums[middle]>target) right = middle-1;
else if(nums[middle]<target) left = middle+1;
else{
nums[middle] == target;
return middle;
}
}
return right+1;
}
};
第二种[left,right)区间
代码:
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int n = nums.size();
int left = 0;
int right = n; //定义为左闭右开的区间
while(left < right){ //这里不能写等于
int middle = (left+right)>>1;
if(nums[middle] > target){
right = middle;
}else if(nums[middle]<target){
left = middle+1;
}
else{
return middle;
}
}
return right;
}
};

浙公网安备 33010602011771号