class Solution {
public:
bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
set<int> s;
int n = nums.size();
for(int i = 0; i < n; ++i){
//INT_MIN,INT_MAX避免溢出INT
//找出s中大于等于nums[i] - t的最小值
auto j = s.lower_bound(max(nums[i], INT_MIN + t) - t);
//找不到则j == s.end(),找到了就看是否小于等于num[i] + t
if(j != s.end() && *j <= min(nums[i], INT_MAX - t) + t)
return true;
//滑动窗口右扩
s.insert(nums[i]);
//保持滑动窗口的长度不超过k
if(i >= k)
s.erase(nums[i - k]);
}
return false;
}
};
220. 存在重复元素 III——滑动窗口+集合
最新推荐文章于 2024-02-04 15:49:04 发布