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

相关推荐
To_OC18 小时前
LC 35 搜索插入位置:二分查找谁都会,边界条件谁写谁懵
javascript·算法·leetcode
码哥DFS18 小时前
二叉树的直径
开发语言·javascript·算法
paopaokaka_luck19 小时前
基于springboot3+vue3的企业考勤管理系统(部门树递归、Echarts图形化分析)
开发语言·spring boot·学习·echarts·mybatis·需求分析·代码规范
minglie119 小时前
zynq高频小数据量PS闭环 抖动时间的测量
学习
long31619 小时前
MySQL 学习练习(配套 01 入门资料)
数据库·学习·mysql
梦雨生生20 小时前
java开发工具(学习第一天)
java·开发语言·学习
营养充电站21 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
人工智能·算法·docker·jupyter
技术小黑1 天前
RNN算法实战系列05 | 天气预测
人工智能·rnn·算法
Ivanqhz1 天前
php8 use-def链
算法·php