220. Contains Duplicate III
Posted hankunyan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了220. Contains Duplicate III相关的知识,希望对你有一定的参考价值。
下标间距<=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; } };
以上是关于220. Contains Duplicate III的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode 220: Contains Duplicate III
[LeetCode] 220. Contains Duplicate III Java