Leetcode刷题——搜索插入位置(运行速度beat 100%)

大家好,继续刷题日记,这是一道数组题。来看题目要求:

(吐槽一下现在csdn改版以后插入图片真麻烦)

思路:1.第一个是暴力循环,写起来也非常简单

            2.但是第一个思路效率有点低,我有点不甘心,所以继续想了二分法,这是我第一次尝试二分法写代码,成功了,很开心,运行速度beat 100%。取两个指针,begin和end,分别表示开头和结尾,temp表示两个指针的中间。首先确定target没有比end还大也没有比begin还小或跟begin一样小,循环比较就可以了,直到end - begin <= 1时停止循环,这时返回end的值。

代码1:

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int len = nums.size();
        for(int i = 0;i < len;i++){
            if(nums[i] >= target)
                return i;
        }
        return len;
    }
};

代码2:

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int len = nums.size();
        if(len == 0)
            return 0;
        if(target > nums[len - 1])
            return len;
        if(target <= nums[0])
            return 0;
        int begin = 0;
        int end = len - 1;
        int temp = (begin + end)/2;
        while(end - begin > 1){
            if(nums[temp] == target)
                return temp;
            if(nums[temp] < target){
                begin = temp;
                temp = (begin + end)/2;
                continue;
            }
            if(nums[temp] > target){
                end = temp;
                temp = (begin + end)/2;
            }
        }
        return end;
    }
};

我们下期见!

猜你喜欢

转载自blog.csdn.net/miss_yuki/article/details/81102126