1. 程式人生 > >Leetcode刷題——搜尋插入位置(執行速度beat 100%)

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;
    }
};

我們下期見!