一.暴力法
4种可能性
1.最小插在头
2.最大插在尾
3.大小在两个元素之间,插在较大元素位置
4.等于某元素
int searchInsert(vector<int>& nums, int target) {
//3种可能性
//第一种插在两个个元素中
//找到某个元素
//插在队尾
for(int i=0; i<nums.size(); i++) {
if(target <= nums[i])
return i;
}
return nums.size();
}
时间复杂度O(n),空间复杂度O(1)
二.二分法
int searchInsert(vector<int>& nums, int target) {
int begin = 0, end = nums.size() - 1;
while(begin <= end) {//两边为闭区间,去掉等号为左闭右开 while(begin<end)
int mid = (end - begin) / 2 + begin;//防溢出
if(target == nums[mid])//找到了
return mid;
else if (target < nums[mid])//肯定不是这个元素
end = mid-1; //没有等号 end=mid
else begin = mid+1;
}
return begin;
}
时间复杂度为O(logn),空间复杂度为O(1)