Leetcode刷題——搜尋插入位置(執行速度beat 100%)
阿新 • • 發佈:2019-01-10
大家好,繼續刷題日記,這是一道陣列題。來看題目要求:
(吐槽一下現在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; } };
我們下期見!