
Problem Description:
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 difference between i and j is at most k.
题目大意:
给定一个数组和一个数字N,求数组里又没有间隔N以下的相等值。
Solutions:
维护一个大小为K的滑动窗口,只需要O(n)的时间即可。注意K大于数组容量的情况。
Code in C++:
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
if(nums.empty()||k<1) return false;
set<int> s;
if(k>nums.size())
{
for(int i=0;i<nums.size();i++){
if(s.find(nums[i])!=s.end())
return true;
else
s.insert(nums[i]);
}
return false;
}
else
{
for(int i=0;i<k;i++)
{
if(s.find(nums[i])!=s.end())
return true;
else
s.insert(nums[i]);
}
for(int j=k;j<nums.size();j++)
{
if(s.find(nums[j])!=s.end())
return true;
else{
s.insert(nums[j]);
s.erase(nums[j-k]);
}
}
return false;
}
}
};




近期评论