【 每天学习一点算法 2026/04/22】四数相加 II

每天学习一点算法 2026/04/22

题目:四数相加 II

给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:

0 <= i, j, k, l < n

nums1i + nums2j + nums3k + nums4l == 0

为了减少前台循环,我们可以先循环计算两个数组的元素和,再计算两个数组的元素和看是否是之前两个数组和的相反数

javascript 复制代码
function fourSumCount(nums1: number[], nums2: number[], nums3: number[], nums4: number[]): number {
  const map = new Map<number, number>() // 用于记录num1和num2的元素和,key为和,value为出现的次数
  const n = nums1.length // 数组长度
  // 循环计算 num1 和 num2 的元素和
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
      const sum = nums1[i] + nums2[j] // 元素和
      // 存储计算结果
      if (map.has(sum)) {
        map.set(sum, map.get(sum) + 1)
      } else {
        map.set(sum, 1)
      }
    }
  }
  let count = 0 // 满足条件的元组计数
  // 循环计算 num2 和 num3 的元素和
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
      const sum = nums3[i] + nums4[j] // num2 和 num3 的元素和
      if (map.has(-sum)) {
        // 找到符合条件的元组计数
        count += map.get(-sum)
      }
    }
  }

  return count
};

题目来源:力扣(LeetCode)

相关推荐
在学了加油17 小时前
Inception v3学习笔记
笔记·学习
Upsy-Daisy17 小时前
IOTA 学习笔记(十一):共享对象与多用户交互
笔记·学习
变量未定义~17 小时前
排列数字、 n-皇后问题
数据结构·算法
元直数字电路验证17 小时前
【CXL】开篇导读 --- CXL是什么以及如何学习
学习·pcie·cxl
我命由我1234518 小时前
Excel - Excel 单元格格式同时设置日期时间
运维·学习·职场和发展·excel·求职招聘·职场发展·学习方法
BirdenT18 小时前
20260604紫题训练
c++·算法
元启数宇18 小时前
疏散指示AI实战:规范布点与路径推演全流程
人工智能·算法
tg:;18 小时前
Catkin 常用命令
开发语言·c++·算法
J.Kuchiki18 小时前
【PostgreSQL内核学习 —— 外部排序生成与归并】
数据库·学习·postgresql
暖阳华笺18 小时前
【高频考点】回溯(暴力搜索)
数据结构·c++·算法·回溯法