四数相加2 | LeetCode-454 | 哈希集合 | Java详细注释

embedded/2024/10/20 21:04:57/
🙋大家好!我是毛毛张!
🌈个人首页: 神马都会亿点点的毛毛张
🕹️思路:四数相加 => 两数相加

📌LeetCode链接:454. 四数相加 II

文章目录

  • 1.题目描述🍎
  • 2.题解🍊
    • 2.1 分组+哈希集合🥝
  • 3.相关练习🍓

1.题目描述🍎

给你四个整数数组 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 == nums1.length
  • n == nums2.length
  • n == nums3.length
  • n == nums4.length
  • 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

2.题解🍊

2.1 分组+哈希集合🥝

java">class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {// 获取数组的长度int n = nums1.length;// 创建一个 HashMap 来存储两个数组(nums1 和 nums2)元素之和出现的次数Map<Integer, Integer> map = new HashMap<>();// 初始化计数器 count,用于存储符合条件的四元组数量int count = 0;// 双重循环遍历 nums1 和 nums2 数组中的所有元素组合for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {// 计算 nums1[i] 和 nums2[j] 的和int sum = nums1[i] + nums2[j];// 将 sum 作为键存储在 map 中,值为这个和出现的次数// 如果 sum 已经存在于 map 中,则将对应的值加 1,否则将其初始化为 1map.put(sum, map.getOrDefault(sum, 0) + 1);}}// 再次使用双重循环遍历 nums3 和 nums4 数组中的所有元素组合for(int i = 0; i < n; i++) {for(int j = 0; j < n; j++) {// 计算目标差值 diff,即 0 - (nums3[i] + nums4[j])int diff = 0 - nums3[i] - nums4[j];// 如果 map 中存在这个 diff,则说明存在一个四元组使得四个数组的元素之和为 0// 计数器 count 增加 map.get(diff) 次,因为 map.get(diff) 表示 nums1 和 nums2 中和为 diff 的次数count += map.getOrDefault(diff, 0);}}// 返回最终计数器的值,即符合条件的四元组数量return count;}
}

3.相关练习🍓

  • 三数之和与四数之和 | LeetCode-15 | LeetCode-18 | 双指针 | 降维 | 哈希集合 | Java | 详细注释
  • 两数之和2-输入有序数组 | LeetCode-167 | 二分法 | 双指针
  • 两数之和-LeetCode梦开始的地方 | LeetCode-1 | 四种方法

http://www.ppmy.cn/embedded/94647.html

相关文章

2024年8月7日(mysql主从 )

回顾 主服务器 [rootmaster_mysql ~]# yum -y install rsync [rootmaster_mysql ~]# tar -xf mysql-8.0.33-linux-glibc2.12-x86_64.tar [rootmaster_mysql ~]# tar -xf mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz [rootmaster_mysql ~]# cp -r mysql-8.0.33-linux-glibc2.…

手机怎么远程控制电脑屏幕?手机远程控制电脑方法分享

手机与电脑之间的互联互通变得越来越便捷。 无论是工作还是学习&#xff0c;有时我们需要在手机上远程控制电脑屏幕&#xff0c;以完成一些复杂的操作或查看电脑上的文件。 本文将详细介绍几种实用的手机远程控制电脑屏幕的方法&#xff0c;帮助读者轻松实现这一目标。 一、使…

Linux磁盘配额

系列文章目录 提示&#xff1a;仅用于个人学习&#xff0c;进行查漏补缺使用。 1.Linux介绍、目录结构、文件基本属性、Shell 2.Linux常用命令 3.Linux文件管理 4.Linux 命令安装(rpm、install) 5.Linux账号管理 6.Linux文件/目录权限管理 7.Linux磁盘管理/文件系统 8.Linu…

多因素考量,探寻场外期权合约期内的潜力股

在金融投资的广阔天地中&#xff0c;场外期权作为一种灵活且颇具潜力的工具&#xff0c;为投资者开辟了多样的策略路径。其中&#xff0c;选股策略极为关键&#xff0c;特别是关注股票在场外期权合约期限内的上涨可能性等诸多方面&#xff0c;对于挖掘潜力个股意义重大。 首先&…

leetcode787. K 站中转内最便宜的航班——优先队列优化的Dijkstra算法+剪枝

题目 leetcode787. K 站中转内最便宜的航班 题目分析 给定一个城市图&#xff0c;每个城市通过航班与其他城市相连。每个航班都有一个起点、终点和价格。你需要找到从起点城市 src 到终点城市 dst 的最便宜路径&#xff0c;但这条路径最多只能经过 k 个中转站。你需要返回这…

基于华为atlas下的yolov5+BoT-SORT/ByteTrack煤矿箕斗状态识别大探索

写在前面&#xff1a; 本项目的代码原型基于yolov5yolov8。其中检测模型使用的yolov5&#xff0c;跟踪模型使用的yolov8。 这里说明以下&#xff0c;为什么不整体都选择yolov8呢&#xff0c;v8无疑是比v5优秀的&#xff0c;但是atlas这块经过不断尝试没有过去&#xff0c;所以…

【数据结构】五、树:8.并查集

4.并查集Disjoint Set 文章目录 4.并查集Disjoint Set4.1查4.2并❗4.3代码实现4.4对union优化4.5对Find的优化&#xff08;压缩路径&#xff09;❗4.6并查集C代码&#xff08;优化后&#xff09;按秩合并 集合。在集合中将各个元素划分为若干个 互不相交的子集。 如何表示&quo…

计算机网络部分基础知识

网络协议的意义 单台主机内部的设备之间需要发送和接收消息&#xff0c;那么和相隔很远的两台主机之间发送消息有什么区别呢&#xff1f;两台主机通过网络发送消息&#xff0c;相当于两个网卡设备之间进行通信&#xff0c;最大的区别在于距离变长了。而距离变长带来的结果就是&…