題目:給定一個整數數組和一個整數 k, 你需要在數組裏找到不同的 k-diff 數對。這裏將 k-diff 數對定義爲一個整數對 (i, j), 其中 i 和 j 都是數組中的數字,且兩數之差的絕對值是 k。
輸入: [3, 1, 4, 1, 5], k = 2
輸出: 2
解釋: 數組中有兩個 2-diff 數對, (1, 3) 和 (3, 5)。
儘管數組中有兩個1,但我們只應返回不同的數對的數量。
①遍歷數組,將數組元素存入hashmap中,key爲數組元素,value爲數組元素出現的次數;
②遍歷hashmap中的元素,根據k值分情況討論:
(1)如果k值爲0,則k-diff對爲相同元素,查找hashmap中的value大於1的key的個數即爲k-diff對的個數;
(2)如果k值大於0,則k-diff對爲不同元素,查找當前key+k是否存在hashmap中,存在即爲k-diff對。
public int findPairs2(int[] nums, int k) {
if (k<0) return 0;
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < nums.length; i++){
if (map.containsKey(nums[i])){
map.put(nums[i], map.get(nums[i])+1);
}else{
map.put(nums[i], 1);
}
}
int count = 0;
//遍歷map
for ( Integer key:map.keySet()) {
//如果k值爲0,則k-diff對爲相同元素
if ((k==0)&&map.get(key)>1){
count++;
}
//注意這裏的map.get(key+k)!= null,key+k不存在時,get操作返回null
//map.get(key+k)會返回空指針異常
//如果k值大於0,則k-diff對爲不同元素,查找當前key+k是否存在hashmap中
if ((k>0)&&map.get(key+k)!= null&&(map.get(key+k)>=1)){
count++;
}
}
return count;
}