题目:

题解:
最直接的做法是线性遍历,如下代码,但这样的时间复杂度为(n),达不到题目要求。
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();
}
};
结合二分查找法:
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int n = nums.size();
int ans = n, left = 0,right = n-1; //ans是最终求解的位置
while(left <= right){
int mid = (left + right)/2;
if(target <= nums[mid]){
ans = mid;
right = mid-1;
}else{
left = mid+1;
}
}
return ans;
}
};