题目
35. 搜索插入位置
我的思路
这个题比较简单,用二分法即可。
在具体实现时,我最初想的是用一个滑标,迭代调整滑标的位置,但是边界调节并不好处理。
下面记一个二分法的模板,窗口法,用left和right标识当前窗口的左右边界。用mid=(left+right)/2下标对应的元素与目标值比较,根据比较结果更新left或right为mid+1或mid-1的值。直到left>right或者查找到目标值。
我的实现
class Solution { public: int searchInsert(vector<int>& nums, int target) { int left = 0; int right = nums.size()-1; if(right<0)return 0; int mid; while(left<=right){//当left==right时还没有满足条件的会跳出循环 mid = (left+right)/2; if(nums[mid]<target){ left=mid+1; }else if(nums[mid]>target){ right=mid-1; }else{ return mid; } } if(nums[mid]>=target)return mid; else return mid + 1; } }; //二分法 //本题要找的是target<=nums[i]的min i //二分法通用模板!!!! /** left = 0;right = n-1; while(left<=right){//当left==right时还没有满足条件的会跳出循环 mid = (left+right)/2; if(nums[mid]<target){ left=mid+1; }else if(nums[mid]>target){ right=mid-1; }else{ return mid; } } */
时间复杂度:logn