題目:
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,要求判斷數組元素在k步返回內時候有重複元素,採用雙層for循環的話時間複雜度是O(nk),k=n,n-1,n-2…如果採用hashmap,算法時間複雜度則降爲O(n).
代碼:
import java.util.HashMap;
import java.util.Map;
public class ContainsDuplicate {
public static boolean containsNearbyDuplicate2(int[] nums, int k) {
if(nums==null || nums.length<2) return false;
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i=0; i<nums.length; i++) {
if(map.containsKey(nums[i])) {
int j = map.get(nums[i]);
if(i-j<=k) return true;
}
map.put(nums[i],i);
}
return false;
}
public static void main(String[] args){
int[] a={0,2,3,-1,2,2};
boolean result=containsNearbyDuplicate2(a,1);
System.out.println("result:"+result);
}
}