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方法非常好,所以以后要多用
分类讨论是一个做题方法不是个技巧不要瞧不起,所以以后有什么阻碍,先看看能不能先分类讨论。
以后要拿出固定地时间来看别人地解法,即使是题目做对了

posted @ 2022-04-01 17:59  是徐洋洋呀  阅读(37)  评论(0)    收藏  举报