标签:lower erase 一个 int 利用 等于 注意 vector dup
下标间距<=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; } };
标签:lower erase 一个 int 利用 等于 注意 vector dup
原文地址:https://www.cnblogs.com/hankunyan/p/9159462.html