(219)-(Contains Duplicate II)-(判断数组中出现重复值的两个元素,位置差最多为k)-(HashSet及时删除元素)
//Given an array of integers and an integer k,
//find out whether there 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.
//数组中出现重复值的两个元素,位置差最多为k
public class Solution
{
public boolean containsNearbyDuplicate(int[] nums, int k)
{
Set<Integer> my_set=new HashSet<Integer>();
//数组为空,0元素,1元素都不会重复的
if(nums==null||nums.length==0||nums.length==1)
{
return false;
}
//位置差最多为0,不合理
if(k==0)
{
return false;
}
//最多为K,即小于K+1的都可以
int cap=k+1;
for(int i=0;i<nums.length;i++)
{
if(i<cap)
{
//都可以的,不删元素
}
else
{
//超出,从set中进行删除之前的元素
//1 2 3 1 最多为2,删除第一个1
Integer curr = nums[i-cap];
my_set.remove(curr);
}
if(my_set.contains(nums[i]))
{
return true;
}
else
{
my_set.add(nums[i]);
}
}
return false;
}
}