454. 4Sum II

JJ·2020년 12월 30일
0

Algorithms

목록 보기
39/114
class Solution {
    public int fourSumCount(int[] A, int[] B, int[] C, int[] D) {
        int n = A.length;
        int result = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                for (int k = 0; k < n; k++) {
                    for (int l = 0; l < n; l++) {
                        if (A[i] + B[j] + C[k] + D[l] == 0) {
                            result++;
                        }
                    }
                }
            }
        }
        
        return result;
    }
}

Time Limit Exceeded
전씨 저와 같은 생각 했을거라고 믿읍니다^^
혹시나 하는 마음에....해봤읍니다

class Solution {
    public int fourSumCount(int[] A, int[] B, int[] C, int[] D) {
        Map<Integer, Integer> ab = new HashMap<Integer, Integer>();
        Map<Integer, Integer> cd = new HashMap<Integer, Integer>();
        int n = A.length;
        int result = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                int newVal = ab.getOrDefault(A[i] + B[j], 0) + 1;
                ab.put(A[i] + B[j], newVal);  
            }
        }
        
        for (int k = 0; k < n; k++) {
            for (int l = 0; l < n; l++) {
                result += ab.getOrDefault(-(C[k] + D[l]), 0);
            }
        }
        
        return result;
    }
}

a + b + c + d = 0
a + b = - (c + d) 를 이용하여 4중 for loop을 2중으로 바꾸기~

Runtime: 59 ms, faster than 92.03% of Java online submissions for 4Sum II.
Memory Usage: 58.6 MB, less than 45.70% of Java online submissions for 4Sum II.

0개의 댓글