题目描述
思路分析
双指针+set+lower_bound
用multiset维护一个滑动窗口
代码实现
class Solution {
public:
bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
typedef long long LL;
multiset<LL> S;
S.insert(1e18),S.insert(-1e18);
for(int i=0,j=0;i<nums.size();i++){
if(i-j>k) S.erase(S.find(nums[j++]));
int x=nums[i];
auto item=S.lower_bound(x);
if(*item-x<=t) return true;
--item;
if(x-*item<=t) return true;
S.insert(x);
}
return false;
}
};