454. 4Sum II
in Coding Interview on Medium, Array, HashMap
배열에서 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;
}
}