码迷,mamicode.com
首页 > 其他好文 > 详细

查找表 219.Contains Duplicate(2),217 Contain Duplicate, 220(3)

时间:2018-12-24 02:56:44      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:ica   窗口   insert   solution   思路   style   i++   div   有一个   

 

技术分享图片

 技术分享图片

思路:滑动窗口(长度为k+1)看这个窗口里的是否有两个元素的值相同。加查找表。

//时间:O(n)
//空间:O(k)
class Solution {
public:
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        unordered_set<int> record;   //查找表
        for(int i=0; i<nums.size();i++)
        {
            if(record.find(nums[i])!= record.end() )
                return true;
            record.insert(nums[i]); 
            //保持record中最多有k个元素,当右边有一个新的元素加入时,窗口才会变成k+1
            if(record.size()==k+1)
                record.erase(nums[i-k]);
        }
        return false;
    }
};

技术分享图片

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        unordered_set<int> record;
        for(int i=0;i<nums.size();i++){
            if(record.find(nums[i])!=record.end())
                return true;
            record.insert(nums[i]);
        }
        return false;
    }
};

技术分享图片

 

技术分享图片

技术分享图片

函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置.

注意:如果所有元素都小于val,则返回last的位置,且last的位置是越界的!!

//时间:O(nlogn)
//空间:O(k)

技术分享图片

 

 对于数组中有2147483647这个值时,当nums[i]+t 容易造成整型溢出。注意整型溢出,改变类型为 long long

class Solution {
public:
    bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
        //long long 64位整型
        set<long long > record;  //因为调用lower_bound 需要有顺序性,所以使用set
        for(int i=0;i<nums.size();i++){
            //查找大于或等于nums[i]-t的第一个元素的位置
            if(record.lower_bound( (long long)nums[i]-(long long)t) != record.end() &&
              *record.lower_bound( (long long)nums[i]-(long long)t)<= (long long)nums[i]+(long long)t)
                return true;
            record.insert(nums[i]);
            
            if(record.size() == k+1)
                record.erase(nums[i-k]);
        
        } 

        return false;
    }
};

 

查找表 219.Contains Duplicate(2),217 Contain Duplicate, 220(3)

标签:ica   窗口   insert   solution   思路   style   i++   div   有一个   

原文地址:https://www.cnblogs.com/Bella2017/p/10166402.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!