[Leetcode] -- Search Insert Position

題目鏈接

分析:就是找到第一個大於或等於給出數字的位置。

代碼一,直接按照這個邏輯實現:

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int i;
        for(i=0;i<nums.size();i++)
        {
            if(nums[i]>=target)
                return i;
        }
        return i;
    }
};//Runtime: 8 ms, Memory Usage: 8.9 MB

但是當數據一大,這個代碼的效率就很低,因爲時間複雜度是O(N),另一個思路就是二分查找。

代碼二,二分查找實現,時間複雜度O(log2N):

class Solution
{
public:
    int searchInsert(vector<int>& v, int target)
    {
        int low=0,up=v.size()-1,mid;
        if(v[up]<target) return up+1;
        while(low<up)
        {
            mid=low+(up-low)/2;
            if(v[mid]==target)
                return mid;
            else if(v[mid]<target)
                low=mid+1;
            else
                up=mid;
        }
        return up;
    }
};//Runtime: 8 ms, Memory Usage: 9 MB

這裏兩個代碼的運行時間和佔用內存看起來好像差不多,應該是測試數據不夠大吧,所以纔沒有體現出很大的差別。
性能肯定是二分會比較好的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章