[LeetCode] day19 454. 四数相加 II

server/2025/2/11 13:02:10/

题目链接

题目描述

给你四个整数数组 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


题解

审题

这道题要注意审题,结果是不去重的,即使两种情况都是4个0相加,只要下标的排列顺序不同,就是不同的结果

思路

这道题有些类似于day1做的两数之和相加,(day1 两数之和相加)当时就用到了哈希表 在遍历数组的同时 去查找哈希表中是否存在符合要求的数
这道题只是变成了四个数组相加 实际上 我们可以两两分组 分别计算两个数组中两数相加的情况:
比如nums1和nums2中两数相加出现了-5这种情况,我们就去找nums3和nums4相加有没有出现5的情况


那应该使用哪种哈希表呢?是数组,set还是map?
题目中的数字可以变得很大,如果用数组,可能存在元素过少,而下标过大的情况(下标要作为映射);
如果用set,也不行。比如nums1={-2,-3}nums2={-2,-3}中两数相加出现了-5 ,可能存在两种情况[0,1]和[1,0] set只能说明存在-5这种情况,但是不能反映出有几种排列。
所以要用map

请添加图片描述
思路如图所示: 让两数相加的结果作为Key,排列组合产生的方式数作为Vaue

代码书写

class Solution {
public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {unordered_map<int,int>map;int result=0;//遍历两个数组,统计两两数之和for(int i=0;i<nums1.size();i++){for(int j=0;j<nums2.size();j++){map[nums1[i]+nums2[j]]++;}}for(int i=0;i<nums3.size();i++){for(int j=0;j<nums4.size();j++){//比如说剩下两个数组的某两个元素之和为5,则在map中找有没有和为-5的if(map.find(-nums3[i]-nums4[j])!=map.end()){ //如果有result+=map[-nums3[i]-nums4[j]]; }}}return result;}
};

http://www.ppmy.cn/server/166754.html

相关文章

深度学习-利用Tacotron 2 和 WaveGlow 模型 进行语音合成

以下是一个利用 Tacotron 2 和 WaveGlow 模型进行语音合成的详细代码实现。Tacotron 2 用于将输入文本转换为梅尔频谱,而 WaveGlow 则根据梅尔频谱生成最终的语音波形。 步骤 1:安装依赖库 首先,确保你已经安装了以下必要的 Python 库: pip install torch numpy scipy l…

【Pytorch实战教程】让数据飞轮转起来:PyTorch Dataset与Dataloader深度指南

文章目录 让数据飞轮转起来:PyTorch Dataset与Dataloader深度指南一、为什么需要数据管理组件?二、Dataset:数据集的编程接口2.1 自定义Dataset三要素2.2 实战案例:图像分类数据集三、Dataloader:高效数据流水线3.1 核心参数解析3.2 数据流可视化3.3 多卡训练支持四、综合…

Java入门进阶

文章目录 1、常用API 1.1、Math1.2、System1.3、Object1.4、Arrays1.5、基本类型包装类 1.5.1、基本类型包装类概述1.5.2、Integer1.5.3、int和String相互转换1.5.4、自动装箱和拆箱 1.6、日期类 1.6.1、Date类1.6.2、SimpleDateFormat类 1.6.2.1、格式化&#xff08;从Date到…

DeepSeek Coder + IDEA 辅助开发工具

开发者工具 我之前用的是Codegeex4模型&#xff0c;现在写一款DeepSeek Coder 本地模型 DeepSeek为什么火&#xff0c;我在网上看到一个段子下棋DeepSeek用兵法赢了ChatGpt&#xff0c;而没有用技术赢&#xff0c;这就是AI的思维推理&#xff0c;深入理解孙子兵法&#xff0c…

车载工具报错分析:CANoe、CANalyzer问题:Stuff Error

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

宝珀(Blancpain):传承近三百年的机械制表传奇(中英双语)

宝珀&#xff08;Blancpain&#xff09;&#xff1a;传承近三百年的机械制表传奇 在钟表行业中&#xff0c;宝珀&#xff08;Blancpain&#xff09; 作为世界上最古老的制表品牌&#xff0c;一直以其卓越的机械工艺、复杂功能腕表和对创新的坚持而闻名。自 1735 年成立以来&am…

在 Linux 系统下,解压 `.tar.gz`

在 Linux 系统下,解压 .tar.gz 文件通常使用 tar 命令。.tar.gz 文件是一种压缩归档文件,它首先使用 tar 命令将多个文件打包为一个 .tar 文件,然后再使用 gzip 压缩生成 .tar.gz 文件。 解压 .tar.gz 文件的命令 要解压 .tar.gz 文件,可以使用以下命令: tar -xzvf fil…

Nature Machine Intelligence 提出了LEGION的机器人终身强化学习框架

2025年2月5日&#xff0c;来自德国慕尼黑工业大学、南京大学、中山大学和清华大学的研究团队在国际顶级期刊《Nature Machine Intelligence》上发表了一项突破性研究——“Preserving and Combining Knowledge in Robotic Lifelong Reinforcement Learning”。该研究提出了一种…