题目
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使 nums [i] = nums [j],并且 i 和 j 的绝对差值最大为 k。
分析
和217存在重复很像,多加一层判断,注意那种情况:[1,2,1,1] k=1 ,虽然第一个 1 和第三个第四个 1 都不符合条件,但是第三个和第四个 1 符合条件。
代码
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
Map<Integer,List<Integer>> map = new HashMap<>();
for (int i = 0; i < nums.length; i++)
if (map.containsKey(nums[i])){
List<Integer> temp = map.get(nums[i]);
for (int j = 0; j < temp.size(); j++)
if ( i - temp.get(j) <= k && i - temp.get(j) != 0)
return true;
else {
List<Integer> tempp = new ArrayList<>(temp);
tempp.add(i);
map.put(nums[i],tempp);
}
}else {
List<Integer> temp = new ArrayList<>();
temp.add(i);
map.put(nums[i],temp);
}
return false;
}
}