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

相关推荐
sunshine22 girl14 分钟前
Java学习七 Java 项目实战2-注册业务
java·学习
奋发向前wcx32 分钟前
CSP-J复赛模拟赛4 王晨旭补题 2026.10.5
算法
sunshine22 girl2 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
传奇开心果编程3 小时前
【SwiftUI提高练中学】第8课 网络层架构:拦截器、重试、缓存与离线优先
学习·macos·ui·ios·swiftui
一条破秋裤3 小时前
内核驱动的意义与课程学习规划
学习
念何架构之路3 小时前
zap采样器与性能优化内幕
算法·性能优化·哈希算法
Bug收容所3 小时前
学习LangChain day1
学习·langchain·llm·agent
传奇开心果编程3 小时前
【现代声明式UI学与练】第7课 组件通信——父传子、子传父、跨层级通信、状态提升与 Context
学习·flutter·react native·ui·swiftui·android jetpack
晒太羊的猫4 小时前
hot100动态规划刷题
算法·动态规划
weixin_531094694 小时前
heap_4内存管理
java·开发语言·算法