(哈希表 ) 454. 四数相加 II ——【Leetcode每日一题】

news2024/12/24 2:27:54

❓454. 四数相加 II

难度:中等

给你四个整数数组 nums1nums2nums3nums4 ,数组长度都是 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

提示

  • n = = n u m s 1. l e n g t h n == nums1.length n==nums1.length
  • n = = n u m s 2. l e n g t h n == nums2.length n==nums2.length
  • n = = n u m s 3. l e n g t h n == nums3.length n==nums3.length
  • n = = n u m s 4. l e n g t h n == nums4.length n==nums4.length
  • 1 < = n < = 200 1 <= n <= 200 1<=n<=200
  • − 2 28 < = n u m s 1 [ i ] , n u m s 2 [ i ] , n u m s 3 [ i ] , n u m s 4 [ i ] < = 2 28 -2^{28} <= nums1[i], nums2[i], nums3[i], nums4[i] <= 2^{28} 228<=nums1[i],nums2[i],nums3[i],nums4[i]<=228

💡思路:分组 + 哈希表

如果将所有组合都求出来,那将是产生 O ( n 4 ) O(n^4) O(n4) 的复杂度,但是如果分成两两一组,复杂度瞬间就会变成 O ( n 2 ) O(n^2) O(n2) ;

所以我们进行分组计算nums1nums2 为一组, nums3nums4 为另外一组:

  • 对于 nums1nums2 ,我们使用二重循环对它们进行遍历,得到所有 nums1[i] + nums2[j] 的值并存入哈希映射nums12中。对于哈希映射中的每个键值对,每个键表示一种 nums1[i] + nums2[j] ,对应的值为 nums1[i] + nums2[j] 出现的次数。
  • 对于 nums3nums4 ,我们同样使用二重循环对它们进行遍历。当遍历到 nums3[i] + nums4[j] 时,如果 −(nums3[i] + nums4[j]) 出现在哈希映射中,那么将 −(nums3[i] + nums4[j])对应的值累加进答案中。

最终即可得到满足 nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0 的四元组数目。

🍁代码:(Java、C++)

Java

class Solution {
    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        Map<Integer, Integer> nums12 = new HashMap<>();
        int ans = 0;
        for(int num1 : nums1){
            for(int num2 : nums2){
                int tmp = num1 + num2;
                nums12.put(tmp, nums12.getOrDefault(tmp, 0) + 1);
            }
        }
        for(int num3 : nums3){
            for(int num4 : nums4){
                ans += nums12.getOrDefault(-num3 - num4, 0);
            }
        }
        return ans;
    }
}

C++

class Solution {
public:
    int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
        unordered_map<int, int> nums12;
        int ans = 0;
        for(int num1 : nums1){
            for(int num2 : nums2){
                nums12[num1 + num2]++;
            }
        }
        for(int num3 : nums3){
            for(int num4 : nums4){
                int tmp = num3 + num4;
                if(nums12.find(-tmp) != nums12.end()){
                    ans += nums12[-tmp];
                }
            }
        }
        return ans;
    }
};

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n 2 ) O(n^2) O(n2),我们使用了两次二重循环,时间复杂度均为 O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度 O ( n 2 ) O(n^2) O(n2),即为哈希映射需要使用的空间。在最坏的情况下, nums1[i] + nums2[j] 的值均不相同,因此值的个数为 n 2 n^2 n2,也就需要 O ( n 2 ) O(n^2) O(n2) 的空间。

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/584290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在多个端口上运行 SSH 服务器?

SSH&#xff08;Secure Shell&#xff09;是一种用于安全远程访问和管理服务器的协议。默认情况下&#xff0c;SSH服务器在Linux系统上使用22号端口进行通信。但是&#xff0c;有时我们可能需要在多个端口上运行SSH服务器&#xff0c;以满足特定的需求或增强服务器的安全性。 本…

Hexo+Twikoo+Vercel 个人博客开启评论功能

Twikoo 文档&#xff1a;https://twikoo.js.org/quick-start.html MongoDB 数据库 点击链接 https://www.mongodb.com/cloud/atlas/register 进入 MongoDB 官网使用邮箱进行注册&#xff1a; 注册之后&#xff0c;MongoDB 会向邮箱发送一封验证邮件&#xff1a; 进入邮箱&…

如何在 Linux 中进行网络地址转换 (NAT)?

网络地址转换&#xff08;Network Address Translation&#xff0c;简称NAT&#xff09;是一种在网络中使用的技术&#xff0c;它允许将私有网络中的IP地址映射到公共网络上&#xff0c;从而实现多个设备共享单个公共IP地址。在Linux系统中&#xff0c;我们可以使用一些工具和配…

实体店引流获客系统模式开发详解

随着互联网的日益发展&#xff0c;实体店的处境变得越来越艰难&#xff0c;获客难和销量差成为了实体店最头疼的两大问题。面对这种情况&#xff0c;一味固步自封是不行的&#xff0c;最好还是顺应潮流&#xff0c;结合一款合适的商业模式&#xff0c;来帮助自己快速引流获客和…

䲟鱼优化算法(ROA)(含MATLAB代码)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

接口测试--apipost接口断言详解

在做接口测试的时候&#xff0c;会对接口进行断言&#xff0c;一个完整的接口测试&#xff0c;包括&#xff1a;请求->获取响应正文->断言。 一、apipost如何进行断言 apipost的断言设置实在后执行脚本中进行编写的。apipost本身提供了11中断言&#xff1a; apt.asser…

经济学基本思维方式

经济学定义 人的欲望是无止境的&#xff0c;而资源有限&#xff0c;这是一个矛盾。 经济学是研究个人和社会如何最优利用由自然和前人提供的有限资源的学问。 经济学的范围 Microeconomics 微观经济学 研究各个行业的运作的以及企业和个人的决策行为的经济学分支。Macroeco…

数据门户基础课程

PC端门户使用示例 首先,以管理员身份登录FineBI系统,安装数据门户,安装步骤见官网 新建一个数据门户

7. Linux系统下在桌面设置添加安装软件启动图标快捷方式

1. 说明 在Linux系统下安装了对应的软件之后&#xff0c;一般启动时需要在命令行终端中进行启动&#xff0c;可以在终端里设置快速启动的命令&#xff0c;相关设置可参考博客&#xff1a;Linux系统下在终端设置快速启动已安装软件。 另一种快捷启动方式就是像在Windows桌面系统…

git报错Filename too long

描述 碰见一个小小问题&#xff0c;Git在拉代码的时候提示Filename too long&#xff0c;具体如图 刚开始&#xff0c;一开始我是使用git自带的那个工具有问题了&#xff0c;然后我就下载了一个tortoisegit&#xff0c;结果还是有问题&#xff0c;这可是22G文件&#xff0c;我…

printf打印彩色字符,还能闪烁!

在使用linux终端命令的时候&#xff0c;我们可以看到像more命令&#xff0c;它的显示方式与一般的字符串不同&#xff0c;是用了反显。同样&#xff0c;linux C下printf还有很多其他不常见的格式化输出形式。本文主要为你盘点这些形式。 效果展示: 特殊的输出 演示代码: #inc…

每日一练 | 华为认证真题练习Day47

1、某台路由器输出信息如下&#xff0c;下列说法错误的是&#xff1f;&#xff08;多选&#xff09; A. 本路由器开启了区域认证 B. 本设备出现故障&#xff0c;配置的Router Id和实际生效的Router ID不一致 C. 本设备生效的Router Id为10.0.12.1 D. 本设备生效的Router Id为…

渗透测试工具Burpsuite

学习文档 https://portswigger.net/burp/documentation/desktop/getting-started/download-and-install Burp Suite是一款流行的集成式Web应用程序安全测试工具套件&#xff0c;广泛应用于渗透测试、安全审计、黑盒测试和漏洞研究等Web安全领域。它由PortSwigger公司开发&…

工具-Ditto与X mouse Button,自定义热键复制粘贴Ctrl C /V,解放双手

文章目录 1、使用演示2、使用方法3、更新&#xff0c;鼠标一键实现复制粘贴3.1 使用方法 1、使用演示 不需要同时摁下ctrl c /v 就可以在键盘上实现一键复制粘贴&#xff0c;其实去网上有外接的键盘&#xff0c;大概20元左右&#xff0c;外接键盘只有两个摁键&#xff0c;就是…

一文解决OpenCloudOS 如何基于 eBPF 实现容器级别的TCP 连接监控?

导语&#xff1a;eBPF 技术的出现&#xff0c;使得内核的资源监控更加的便捷、高效&#xff0c;容器化监控也更加适用于云原生的场景。基于 eBPF 实现的可观测性&#xff0c;可以无需修改内核源码或者加载内核模块&#xff0c;安全高效的扩展内核功能&#xff0c;很好的解决了上…

11.1.0 Web 打印新支持 UGC 布局模板

作者&#xff1a;yx 目录 前言 一、在iDesktopX制作布局并输出布局模板 二、将布局模板拷贝到iServer 三、构建Web打印内容 四、结果展示 前言 之前有小伙伴希望 iServer 的 Web 打印布局可以采用 iDesktop/iDesktopX 输出的布局模板&#xff0c;针对该需求11.1.0版本做了…

基于标准库函数的STM32的freertos的移植(二)——freertos工程源码移植

1.新建Project_Stm32f407的文件夹&#xff0c;如下图所示&#xff1a; 图1 新建Project_Stm32f407的文件夹 2.在Project_Stm32f407的目录下新建7个子目录&#xff08;分别新建cmsis、include、source、fwlib、user、mdk和freertos等7个文件夹&#xff09;。 图2 新建7个文件目录…

Unity 一键修改场景中的字体,修改部分字体

强大的Unity编辑器扩展 介绍&#xff1a; 测试编辑器扩展时顺便做了个小工具&#xff0c;挺有意思 选中场景中的物体后就可以一键修改这个物体下所有字体 如果什么都不选&#xff0c;就是修改这个场景中的全部字体 修改完字体后记得保存场景&#xff01; 代码&#xff0…

《微服务实战》 第二十五章 Java多线程安全与锁

前言 本章节介绍Java多线程安全与锁 1、Java多线程安全与锁 1.1、多线程安全问题 当多个线程同时操作同一个数据时&#xff0c;可能会出现数据不一样的情况&#xff0c;这就是线程安全问题。线程安全机制用于保证多个线程访问数据时的一致性. 1.2、线程安全问题三方面 原…

际华集团电子化采购平台建设之路及功能亮点

际华集团股份有限公司&#xff08;以下简称“际华集团”&#xff09;于2009年6月26日设立&#xff0c;并于2010年8月16日在上海证券交易所挂牌上市&#xff0c;旗下50余户全资及控股子公司&#xff0c;分布在全国23个省、直辖市、自治区以及欧洲、香港&#xff0c;资产规模超30…