[Question quotidienne LeetCode] [Difficulté] 454. Ajout de quatre nombres II
454. Addition de quatre nombres II
454. Addition de quatre nombres II
Idée d'algorithme: combinaison
sujet:
code java
- Divisé en la somme de deux nombres A + B, la somme de deux nombres C + D,
- Ensuite, jugez combien de types de (A + B) + (C + D) y a-t-il
- Les résultats de A + B peuvent être enregistrés à l'aide de la carte, ce qui accélère la recherche
class Solution {
//思路,分成两个数之和A+B,两个数之和C+D,然后再判断(A+B)+(C+D)有多少种
public int fourSumCount(int[] A, int[] B, int[] C, int[] D) {
//使用map存储A+B的值,提高查找效率
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
int n = A.length;
//遍历A+B的所有组合,用map记录结果
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
map.put(A[i]+B[j], map.getOrDefault(A[i]+B[j], 0)+1);
}
}
int ans = 0;
//遍历C+D的所有组合,再查询map,看能否找到元组
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (map.containsKey(-C[i]-D[j])) {
ans += map.get(-C[i]-D[j]);
}
}
}
return ans;
}
}