35. 搜索插入位置-7月17日

题目

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

拓展学习

原文地址:https://www.cnblogs.com/BoysCryToo/p/13328887.html