Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the absolute difference between i and j is at most k.
- 判断是否存在两个相等的数,且|i - j| < k
- set容器的使用
- 类似于一个大小为k的窗口,每次窗口右移,删除set中窗口外的值
#include <stdio.h>
#include <vector>
#include <set>
using namespace std;
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
if (k <= 0)
return false;
set<int> s;
for (int i = 0; i < nums.size(); i++){
if (i > k)
s.erase(nums[i - k - 1]);
if (!s.insert(nums[i]).second)
return true;
}
return false;
}
};
int main()
{
Solution solution;
vector<int> nums = {1,2,1};
if (solution.containsNearbyDuplicate(nums, 1))
printf("true\n");
else
printf("false\n");
return 0;
}