Contains Duplicate III

 

 首先是自己写的暴力解法,这么写就超时了

class Solution {
public:
    bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) 
    {
        int i;
        for(i=0;i<nums.size();i++)
        {
            for(int a=i+1;a<i+k;a++)
            {
                if(abs(nums[i]-nums[a])<=t)
                {
                    return true;
                }
            }
        }
        return false;
    }
};

  之后是看网友的滑动窗口法

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

  

posted @ 2021-04-26 12:21  章大佬  阅读(35)  评论(0)    收藏  举报