220. Contains Duplicate III

Posted hankunyan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了220. Contains Duplicate III相关的知识,希望对你有一定的参考价值。

下标间距<=k,立马就想到滑动窗口,维护一个大小为k的区间。

对于新的数,维护区间大小的同时,需要判断该区间中是否存在 [num-t, num+t] 的数字。由于需要根据大小查找,可以利用大小为 k 的 set 作为维护的区间,set 是有序的,因此可以调用 lower_bound 找到第一个大于等于 num-t 的数字。只要判断该数是否小于等于 num+t 即可(因为只要有一个就行了)。

注意一下 int 会越界,要用 long(真恶心)。

class Solution {
public:
    bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
        set<long> s;
        for (int i=0;i<nums.size();++i){
            long num=nums[i];
            if (i>k) s.erase(nums[i-k-1]);
            auto low=s.lower_bound(num-t);
            if ( low!=s.end() && *low<=num+t ) return true;
            s.insert(num);
        }
        return false;
    }
};

 

以上是关于220. Contains Duplicate III的主要内容,如果未能解决你的问题,请参考以下文章

220. Contains Duplicate III

Leetcode 220: Contains Duplicate III

220. Contains Duplicate III

[LeetCode] 220. Contains Duplicate III Java

LeetCode220. Contains Duplicate III

220. Contains Duplicate III(核心:set数组有序/桶排序)