【 每天学习一点算法 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)

相关推荐
子非鱼94274 分钟前
06-Flutter 鸿蒙实战 06:上传后处理流程,照片识别、故事生成和状态刷新
学习·flutter·华为·harmonyos
五条凪24 分钟前
简单理解 BM25 与 TF-IDF
人工智能·算法·搜索引擎·全文检索·tf-idf
行者全栈架构师34 分钟前
【码动四季】Spring Boot 可观测性体系:Micrometer + OpenTelemetry + Grafana 全链路搭建
java·算法·架构
TCW112137 分钟前
AI底层系列:用C++实现线性代数的公式推导与算法设计-8.线性变化(3)
c++·人工智能·算法
天天爱吃肉82181 小时前
# 商用车多体动力学整车仿真学习笔记(开篇总览)
人工智能·笔记·python·功能测试·学习·汽车
皓月斯语1 小时前
B3849 [GESP样题 三级] 进制转换 题解
c++·算法·题解
一起努力啊~1 小时前
DataWhale组队学习笔记--llm-algo-leetcode(三)
笔记·学习·llm
中微极客1 小时前
剪枝与量化:让YOLO在边缘设备上高效部署
算法·yolo·剪枝
云空2 小时前
《Three.js 可操控3D魔方(键盘转动+打乱+复原)》
javascript·学习·游戏·3d·three.js
牢姐与蒯2 小时前
双指针算法
数据结构·算法