454. 4Sum II

배열에서 4개의 정수 합이 0 이 되는 모든 튜플(i, j, k, l)의 수를 반환

  • 0 <= i, j, k, l < n
  • nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0

개수를 찾는 문제는 맵을 이용해서 카운트 한다. 두 수의 합에 대한 보수값을 이용해서 복잡도를 줄인다.

class Solution {
    
    // a + b = -(c + d)
    // T: O(n^2), S: O(n^2)
    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        int count = 0;
        
        Map<Integer, Integer> map = new HashMap<>();
        
        // If a + b exists in the hashmap, increment the value.
        for (int a : nums1) {
            for (int b : nums2) {
                map.put(a + b, map.getOrDefault(a + b, 0) + 1);
            }
        }
        
        // Lookup key -(c + d) in the hashmap.
        for (int c : nums3) {
            for (int d : nums4) {
                count += map.getOrDefault(-(c + d), 0);
            }
        }
        
        return count;
    }
}





© 2017. by yeopoong.github.io

Powered by yeopoong