题目描述:
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.
Example 1:
Input: nums = [1,2,3,1], k = 3
Output: true
Example 2:
Input: nums = [1,0,1,1], k = 1
Output: true
中文理解:给出一个数组和一个整数k,如果数组nums[i] = nums[j] 并且存在同一个nums[i]元素值的情况下,abs(i-j)<=k。故[1,0,1,1] [1,2,3,1,2,3]
1 结果为true, 2 结果为false。
解题思路:使用hashmap存储nums[i]和nums[i]的下标列表,HashMap<Integer,ArrayList<Integer>> map=new HashMap<Integer,ArrayList<Integer>>();最后遍历hashmap,得到结果。
代码(java):
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
if(nums.length<2)return false;
HashMap<Integer,ArrayList<Integer>> map=new HashMap<Integer,ArrayList<Integer>>();
int dumplicate=0;
for(int i=0;i<nums.length;i++){
if(map.keySet().contains(nums[i])){
ArrayList<Integer> tmp=map.get(nums[i]);
tmp.add(i);
map.put(nums[i],tmp);
}
else{
ArrayList<Integer> tmp=new ArrayList<Integer>();
tmp.add(i);
map.put(nums[i],tmp);
}
}
for(ArrayList<Integer> lst:map.values()){
if(lst.size()>=2){
dumplicate=1;
for(int i=0;i<lst.size()-1;i++){
if(lst.get(i+1)-lst.get(i)<=k)return true;
}
}
}
return false;
}
}