1. 程式人生 > 其它 >532--陣列中的 k-diff 數對(技巧+感悟)

532--陣列中的 k-diff 數對(技巧+感悟)

題目

給定一個整數陣列和一個整數 k,你需要在數組裡找到 不同的 k-diff 數對,並返回不同的 k-diff 數對 的數目。

這裡將 k-diff 數對定義為一個整數對 (nums[i], nums[j]),並滿足下述全部條件:

0 <= i < j < nums.length
|nums[i] - nums[j]| == k
注意,|val| 表示 val 的絕對值。

題解

點選檢視程式碼
package Com.Xu.DoublePointer;

import java.util.HashMap;
import java.util.Map;

public class FiveThreeTwp {
    public static int findPairs(int[] nums, int k) {
        Map<Integer,Integer> map=new HashMap<>();
        int times=0;
//        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);
//            }
//        }

        for (int i : nums)
            map.put(i,map.getOrDefault(i,0)+1);
        int res=0;
        if(k==0){
            for (int i : map.values())
                if(i>0) res++;
        }
        else {
            for (int i : map.keySet())
                if(map.containsKey(i+k)) res++;
        }
//        for(int i=0;i<nums.length;i++){
//            int num = Math.abs(nums[i] - k);
//            if(map.containsKey(num)){
//                if(num==nums[i]){
//                    if(map.get(num)!=1){
//                        times++;
//                        continue;
//                    }
//                }
//                times++;
//            }
//        }
//        return times;
        return res;
    }

    public static void main(String[] args) {
        int [] nums=new int[]{3, 1, 4, 1, 5};
        int k=2;
        System.out.println(findPairs(nums,k));
    }
}

思考

程式碼是越簡潔越好,像if語句如果沒有else用簡寫非常好看。
做題就需要技巧的,笨辦法也能解決,但是時間不可以行,所以做題是需要往技巧的方向發展的。
map的getorDefault方法非常好,所以以後要多用
分類討論是一個做題方法不是個技巧不要瞧不起,所以以後有什麼阻礙,先看看能不能先分類討論。
以後要拿出固定地時間來看別人地解法,即使是題目做對了