题目地址:
https://leetcode.com/problems/4sum-ii/
给定四个长度相等都是 n n n的数组,各自取一个数,问有多少种方案可以使得取得的数总和恰好是一个给定数 a a a。
可以先用哈希表存一下后两个数组各自取一个数的和的方案数,然后枚举前两个数组取哪两个数,在哈希表里找相反数的方案数,累加即可。代码如下:
import java.util.HashMap;
import java.util.Map;
public class Solution {
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
Map<Integer, Integer> cnt = new HashMap<>();
for (int x : nums3) {
for (int y : nums4) {
cnt.put(x + y, cnt.getOrDefault(x + y, 0) + 1);
}
}
int res = 0;
for (int x : nums1) {
for (int y : nums2) {
res += cnt.getOrDefault(-(x + y), 0);
}
}
return res;
}
}
时空复杂度 O ( n 2 ) O(n^2) O(n2)。