letcode每日一题-四数相加 II

现在的天气真的是冷的冻耳朵,做道题来热热身吧!!!

题目描述如下:

解题思路:
A[i] + B[j] + C[k] + D[l] = 0 我们可以把A[i] + B[j] + C[k] + D[l]看成两个整体,即两个数相加为0,
这样最快的就是把其中一部分放进Hash中,直接判断0-另一个数的结果在hash中是否存在就可以了。
方案一:A为一部分,B,C,D为一部分,这样时间复杂度是O(N^3)
方案二:A,B为一部分,C,D为一部分,这样时间复杂度是O(N^2)
方案三:A,B,C为一部分,D为一部分,时间复杂度是O(N^3)
这样看来方案二是最好的,代码实现:


public int fourSumCount(int[] A, int[] B, int[] C, int[] D) {
        int result=0;
        HashMap<Integer,Integer> sumMapAB=new HashMap<>();
        for(int i=0;i<A.length;i++){
            for(int j=0;j<B.length;j++){
                int sum=A[i]+B[j];
                sumMapAB.put(sum,sumMapAB.getOrDefault(sum,0)+1);
            }
        }
        for(int i=0;i<C.length;i++){
            for(int j=0;j<D.length;j++){
                int sum=C[i]+D[j];
                result+=sumMapAB.getOrDefault(0-sum,0);
            }
        }
        return result;
    }


明天也要加油啊!!!

原文地址:https://www.cnblogs.com/MissWX/p/14046510.html