算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
今天和大家聊的问题叫做 四数相加 II,我们先来看题面:
https://leetcode-cn.com/problems/4sum-ii/
Given four integer arrays nums1, nums2, nums3, and nums4 all of length n, return the number of tuples (i, j, k, l) such that:
0 <= i, j, k, l < n
nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:
0 <= i, j, k, l < n
nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
示例 1: 输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2] 输出:2 解释: 两个元组如下: 1. (0, 0, 0, 1) -> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 1 + (-2) + (-1) + 2 = 0 2. (1, 1, 0, 0) -> nums1[1] + nums2[1] + nums3[0] + nums4[0] = 2 + (-1) + (-1) + 0 = 0 示例 2: 输入:nums1 = [0], nums2 = [0], nums3 = [0], nums4 = [0] 输出:1解题
class Solution {
public int fourSumCount(int[] A, int[] B, int[] C, int[] D) {
Map countAB = new HashMap();
for (int u : A) {
for (int v : B) {
countAB.put(u + v, countAB.getOrDefault(u + v, 0) + 1);
}
}
int ans = 0;
for (int u : C) {
for (int v : D) {
if (countAB.containsKey(-u - v)) {
ans += countAB.get(-u - v);
}
}
}
return ans;
}
}
好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。
上期推文:
LeetCode1-440题汇总,希望对你有点帮助!
LeetCode刷题实战441:排列硬币
LeetCode刷题实战442:数组中重复的数据
LeetCode刷题实战443:压缩字符串
LeetCode刷题实战444:序列重建
LeetCode刷题实战445:两数相加 II
LeetCode刷题实战446:等差数列划分 II - 子序列
LeetCode刷题实战447:回旋镖的数量
LeetCode刷题实战448:找到所有数组中消失的数字
LeetCode刷题实战449:序列化和反序列化二叉搜索树
LeetCode刷题实战450:删除二叉搜索树中的节点
LeetCode刷题实战451:根据字符出现频率排序
LeetCode刷题实战452:用最少数量的箭引爆气球
LeetCode刷题实战453:最小操作次数使数组元素相等



