24.數組中的K-diff數對

題目:給定一個整數數組和一個整數 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;
     }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章