
变量简洁正确完整思路 滑动窗口leftright,长度k,对于新的元素num1可以遍历窗口内部,如果滑动窗口用set或map存放就有序,调用lower_bound(num1-t)找到第一个大于等于num1-t的迭代器it,找到且*it<=num1+t则true,否则num1放进串口right++ 精确定义 left已经 right已经 window set,大小right-left+1,小于等于k class Solution { public: bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) { set<int>window; int left=0,right=-1,n=nums.size(); while(1){ if(right-left+1<=k&&right<=n-2){ right++; auto it=window.lower_bound(max(nums[right],INT_MIN+t)-t); if(it!=window.end()&&*it<=min(nums[right],INT_MAX-t)+t)return true; window.insert(nums[right]); }else if(right-left+1>k){ window.erase(nums[left]); left++; if(right==n-1)break; }else break; } return false; } }; 踩过的坑 (max(nums[right],INT_MIN+t)-t);防止nums[right]-t超出的方式是nums[right] 大于INT_MIN+t set<int>window;有序集合 auto it=window.lower_bound stl容器调用lower_bound二分查找找到第一个大于等于num的迭代器 滑动窗口通常用原数组保存,这道题用set保存为了有序
浙公网安备 33010602011771号