LeetCode454.四数相加II

454.四数相加II

LeetCode454.四数相加II_第1张图片

这道题目是四个独立的数组

只要找到A[i]+B[j]+C[k]+D[l] = 0即可

1、首先,我们需要定义一个哈希Map,key存放a和b两数之和,value存放a和b两数之和出现的次数

2、遍历大A和大B数组,统计两个数组元素之和,以及它们出现的次数,放到map中

3、定义int类型的变量count,用来统计a+b+c+d = 0出现的次数

4、遍历大C和大D数组,找到如果0-(c+d)在map中出现过的话,就用count把map中的key对应的value统计出来

5、最后返回统计值count

在这里,还需要提一嘴的是Map的GetOrDefault()方法

格式:map.getOrDefault(key,默认值)

如果map中存在key,则返回key所对应的value值

如果map中不存在key,则返回默认值

    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        int res = 0;
        Map<Integer,Integer> map = new HashMap();
        //统计两个数组中的元素之和,同时统计出现的次数,放入map中
        for(int i : nums1){
            for(int j : nums2){
                int sum = i+j;
                //这段代码的作用是统计sum出现的次数,并将其存储到map中
                //key为sum
                //如果当前map中存在key为sum的值,则value为该key所对应的value
               	//如果当前map中不存在,则value为1
                map.put(sum,map.getOrDefault(sum,0)+1);
            }
        }
        //统计剩余的两个元素和,在map中找是否存在相加等于0的结果,并记录次数
        for(int i : nums3){
            for(int j : nums4){
                res+=map.getOrDefault(0-i-j,0);
            }
        }
        return res;
    }

你可能感兴趣的:(算法实战,数据结构,leetcode,力扣,算法,java,哈希算法)