我的思路是用set和multiset。对219可以用类似滑动窗口的方法。
#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> us;
size_t len=nums.size();
for (size_t i=0; i<len; ++i) {
if (us.count(nums[i])>0) return true;
us.insert(nums[i]);
}
return false;
}
bool containsNearbyDuplicate(vector<int>& nums, int k) {
unordered_multiset<int> us;
size_t len=nums.size();
if (len<=1) return false;
size_t i=0, j=1;
us.insert(nums[0]);
while(j<len) {
if (j-i <= k) {
if (us.count(nums[j])>0) return true;
us.insert(nums[j]);
j++;
} else {
us.erase(nums[i]);
i++;
}
}
return false;
}
int main()
{
vector<int> a1={1,2,3,1};
vector<int> a2={1,0,1,1};
vector<int> a3={1,2,1};
cout<<containsNearbyDuplicate(a1, 3)<<endl;
cout<<containsNearbyDuplicate(a2, 1)<<endl;
cout<<containsNearbyDuplicate(a3, 0)<<endl;
return 0;
}
163

被折叠的 条评论
为什么被折叠?



