LeetCode 454. 四数相加 II
题目链接
题目分析
这个题最容易想的就是暴力法,O(n^4)的时间复杂度必定会T,所以不用想。
然后我们就可以利用缓存的思想,把A,B,C,D分成两个组,先对AB计算组合和,然后对CD计算组合和,检查AB中是否有其相反数,如果有的话就把AB中出现相反数次数加到res上。
代码实现
class Solution {
public int fourSumCount(int[] A, int[] B, int[] C, int[] D) {
int res = 0;
HashMap<Integer, Integer> map1 = new HashMap<>();
int i = 0;
while(i < A.length){
int j = 0;
while(j < B.length){
int sum = A[i] + B[j];
map1.put(sum, map1.getOrDefault(sum, 0) + 1);
j++;
}
i++;
}
int k = 0;
while(k < C.length){
int l = 0;
while(l < D.length){
int sum = C[k] + D[l];
res += map1.getOrDefault(-sum, 0);
l++;
}
k++;
}
return res;
}
}