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

devtools/2024/9/23 10:30:09/
🙋大家好!我是毛毛张!
🌈个人首页: 神马都会亿点点的毛毛张
🕹️思路:四数相加 => 两数相加

📌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/devtools/92592.html

相关文章

工厂模式和策略模式的核心区别与最佳实践

工厂模式和策略模式的核心区别与最佳实践 在软件设计中&#xff0c;设计模式是解决特定问题的常用方法。工厂模式&#xff08;Factory Pattern&#xff09;和策略模式&#xff08;Strategy Pattern&#xff09;是两种非常重要的设计模式&#xff0c;广泛应用于Java开发中。尽管…

spingboot mongoDB实现文件的上传、下载、预览

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0…

开源应用:AI监测如何成为社会安全的智能盾牌

社会背景 随着社会的快速发展&#xff0c;社会安全管理正站在一个新时代的门槛上。社会对安全管理的需求不断增长&#xff0c;传统的安全措施已难以满足现代社会的需求。AI技术以其独特的数据处理和模式识别能力&#xff0c;正在成为我们社会安全的智能盾牌。 AI大模型识别功能…

计算机毕业设计选题推荐-电缆行业生产管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Codeforces Round 961 【C. Squaring】

C. Squaring 题目大意&#xff1a; 给你一个长度为n的数组&#xff0c;求最少次操作&#xff0c;使得数组&#xff08;非严格&#xff09;递增。一次操作&#xff1a;Ai 变为 Ai^2。 不可能实现输出-1。 关键思路&#xff1a; 分子分母同时取对数&#xff0c;比值不变。 …

代码随想录算法训练营 | 贪心算法 part01

贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 什么是局部最优&#xff0c;局部最优能否推出全局最优&#xff08;举反例 举不出来的时候就可以试试贪心&#xff09; 455.分发饼干 455.分发饼干 局部最优&#xff1a;大饼干就要优先分给胃口大的孩子&am…

.ps1文件执行报错,但是相同的代码直接复制到windows powershell里面能成功执行。

报错&#xff1a; “magick”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。 所在位置 C:\Users\23121\Desktop\pic2mark.ps1:9 字符: 1 magick $inputFilePath $output…

Html实现全国省市区三级联动

目录 前言 1.全国省市区的Json数据 2.找到Json数据文件(在此博文绑定资源)之后&#xff0c;放到resource目录下。 3.通过类加载器加载资源文件&#xff0c;读取Json文件 3.1 创建JsonLoader类 3.2 注入JsonLoader实体&#xff0c;解析Json文件 4.构建前端Html页面 5.通过…