/**
* 18. 四数之和
* @author wsq
* @date 2020/09/26
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。
注意:
答案中不可以包含重复的四元组。
示例:
给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。
满足要求的四元组集合为:
[
[-1, 0, 0, 1],
[-2, -1, 1, 2],
[-2, 0, 0, 2]
]
链接:https://leetcode-cn.com/problems/4sum
*/
package com.wsq.leetcode;
import java.util.*;
public class FourSum {
/**
* 难点就是怎么去过滤掉重复的元素列表
* @param nums
* @param target
* @return
*/
public List<List<Integer>> fourSum(int[] nums, int target) {
Arrays.sort(nums);
List<List<Integer>> ansList = new ArrayList<>();
int len = nums.length;
for(int i = 0; i < len; ++i) {
// 判断是否重复
if(i >= 0 && nums[i] == nums[i-1]) {
continue;
}
for(int j = i + 1; j < len; ++j) {
// 判断是否重复
if(j >= i + 1 && nums[j] == nums[j - 1]) {
continue;
}
int left = j + 1;
int right = len - 1;
while(left < right) {
int tmpN = nums[i] + nums[j] + nums[left] + nums[right];
if(tmpN == target) {
ArrayList<Integer> tmpList = new ArrayList<>();
tmpList.add(nums[i]);
tmpList.add(nums[j]);
tmpList.add(nums[left]);
tmpList.add(nums[right]);
ansList.add(tmpList);
// 相等的情况,使得左右指针同时中间移动,并且跳过所有相等的值
while(nums[++left] == nums[left - 1] && left < right) {}
while(nums[--right] == nums[right - 1] && left < right) {}
}else if(tmpN < target) {
left++;
}else {
right--;
}
}
}
}
return ansList;
}
public static void main(String[] args) {
}
}
相关推荐
IEPE传感器4mA恒流源接口电路
另外传感器的偏置电压大概在10V多点,一般接个电容把直流分量去掉。这里我们要把恒流源的电流设置在4毫安左右,R1取33Ω差不多正好。经过CR的隔直流电路后的波形是这样的。
LeetCode 18. 四数之和(双指针)
1. 题目 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意: 答案中不可以包含重复的四元组。 示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集...
FreeModbus V1.6主机模式实战:如何在STM32上实现Modbus RTU主从一体通信
本文详细介绍了如何在STM32平台上利用FreeModbus V1.6开源协议栈实现Modbus RTU主从一体通信。文章深入剖析了V1.6版本主机模式的架构设计,提供了从硬件配置、串口与定时器移植到FreeRTOS操作系统适配的完整实战指南,并分享了数据缓冲区管理、多线程协同及高级调试技巧,为构建稳定可靠的工业通信网关提供了系统化解决方案。
【20190624】【每天一道算法题】四数之和(双指针、哈希表)
问题 给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,c和 d,使得a + b + c + d的值与target相等?找出所有满足条件且不重复的四元组。 注意:答案中不可以包含重复的四元组。 示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为...
浅析图像处理中的名词:Gamma 校正(Gamma变换、Gamma调整)
浅析图像处理中的名词:Gamma 校正(Gamma变换、Gamma调整)
初识数据结构之入门必懂——线性表(顺序表)
本文将介绍数据结构中的线性表与线性表中最简单的结构——顺序表
57. 三数之和、58. 四数之和(双指针)
给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。 注意事项 在三元组(a, b, c),要求a 结果不能包含重复的三元组。 样例 如S = {-1 0 1 2 -1 -4}, 你需要返回的三元组集合的是: (-1, 0, 1) (-1, -1, 2) 思想:类似两数之和,两个指针 关键:如何
Windows下MMdetection3D保姆级安装指南(含CUDA和PyTorch版本避坑)
本文提供Windows平台下MMdetection3D的完整安装指南,重点解决CUDA与PyTorch版本匹配问题。从环境准备到关键组件安装,详细介绍了CUDA Toolkit选择策略、PyTorch精准安装步骤,以及MM系列组件的安装顺序和常见错误解决方案,帮助用户顺利完成3D目标检测环境的配置。
【双指针】专题:LeetCode 18题解——四数之和
四数之和
红绿灯背后的数学:如何用Java算出“黄金绿灯时间“?
本文探讨了城市交通信号灯配时优化的数学原理与Java实现方法。文章首先分析了信号灯配时不合理导致的交通问题,指出精确计算绿灯时长的重要性。核心内容包括:1)基于M/M/1排队模型建立车流量数学模型,通过优化算法最小化总等待时间;2)使用Java实现信号灯优化控制器,采用梯度下降法动态调整绿灯时长。文中提供了完整的Java代码实现,包括信号灯控制器基类和优化控制器类,采用原子类保证线程安全,并详细解释了关键算法原理和实现细节。该方案可为城市智能交通系统提供理论支持和技术实现参考。
PoE 的三大国际标准:PoE、PoE+、PoE++
很多人知道 PoE 能“一根网线,既供电又传数据”,但鲜少有人能说清楚:PoE 供电到底分几种标准?差别有多大?哪些设备要用 PoE,哪些必须上 PoE+ 或 PoE++?今天,我们就来一次彻底的“拆解”,把 PoE 的三大国际标准——讲得明明白白,顺便也帮你厘清网络工程中的常见“供电疑惑”。
【算法专题】双指针算法之18. 四数之和(力扣)
🏆本篇主题为:【算法专题】双指针算法之18. 四数之和(力扣)
YOLO格式数据集【数据增强】终极脚本 | 70+种顶级数据增强方法 | 可带标签增强
YOLO格式数据集【数据增强】终极脚本 | 70+种顶级数据增强方法 | 可带标签增强
专题一 - 双指针 - leetcode 18. 四数之和 - 中等难度
专题1 - 双指针 - 去重 - 边界控制
ssm框架搭建
这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载
android 蓝牙通讯demo
android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。
[双指针] (四) LeetCode 18.四数之和
[双指针] [四] LeetCode 18.四数之和
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
Leetcode—18. 四数之和(双指针+哈希表+剪枝处理/DFS算法—基础算法)
给你一个由n个整数组成的数组nums,和一个目标值target。请你找出并返回满足下述全部条件且的四元组bcd你可以按返回答案。
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
Leecode 18. 四数之和 排序+双指针
原题链接:Leecode 18. 四数之和 注意数据范围,这题和之前的Leecode 15. 三数之和 双指针的思路基本一致,都是排序+双指针,但是此题中nums数组中数据较大,4数相加可能爆int,要注意数据范围的判断。 class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<in
【算法——双指针】LeetCode 18 四数之和
【算法——双指针】LeetCode 18 四数之和
8.【LeetCode 18】四数之和 —— Java 排序 + 双指针解法详解
摘要: 题目要求在数组中找到所有不重复的四元组,使其和等于目标值。解法采用排序+双指针策略:先排序数组,然后固定前两个数,在后半部分使用双指针寻找剩余两数。通过三层循环(固定i、j,移动left和right)遍历所有可能组合,同时利用去重处理避免重复结果。时间复杂度为O(n³),空间复杂度O(1)。示例代码展示了具体实现,包括排序、双指针移动及去重逻辑。OJ链接见LeetCode题库。
18. 四数之和(双指针)
题目 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意: 答案中不可以包含重复的四元组。 示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ]
【双指针】18. 四数之和
题目: 题意:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意: 答案中不可以包含重复的四元组。 示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ]
算法训练Day7| LeetCode454. 四数相加II(Map作哈希表);383.赎金信(数组作哈希表);15.三数之和(双指针);18.四数之和(双指针)
四数之和的双指针解法是两层for循环nums[k] + nums[i]为确定值,依然是循环内有left和right下标作为双指针,找出nums[k] + nums[i] + nums[left] + nums[right] == target的情况,三数之和的时间复杂度是O(n^2),四数之和的时间复杂度是O(n^3)。双指针法就是将原本暴力O(n^3)的解法,降为O(n^2)的解法,四数之和的双指针解法就是将原本暴力O(n^4)的解法,降为O(n^3)的解法。说到去重,其实主要考虑三个数的去重。
双指针法在哈希表上的应用:LeetCode 15. 三数之和 LeetCode 18. 四数之和
题目是在一个数组内进行操作,有两个限制,第一个是各元素的索引下标不能相同,另一个是三元组的去重。题目是在一个数组内进行操作,有两个限制,第一个是各元素的索引下标不能相同,另一个是四元组的去重。
优选算法 力扣 18. 四数之和 双指针算法的进化 优化时间复杂度 C++ 题解 每日一题
本文围绕力扣 18 题 “四数之和” 展开解析。该题要求在整数数组中找出所有不重复的四元组,使其和等于目标值。核心解法是基于 “固定元素 + 双指针”,先排序数组,通过两层循环固定前两个元素,再用双指针寻找后两个元素,将问题转化为两数之和。文中详细拆解代码逻辑,包括排序预处理、四层去重机制(固定元素与双指针的去重)、整数溢出防护等关键环节,分析了时间复杂度(O (n³))和空间复杂度,并总结了常见坑点如溢出、去重时机错误等,还指出其对解决多数之和问题的借鉴意义。
双指针—四数之和(leetcode 18)
题目描述 算法分析 代码 时间复杂度分析
双指针-LeetCode18. 四数之和
1、题目描述 https://leetcode-cn.com/problems/4sum/ 基础题:双指针对撞-LeetCode15. 三数之和https://blog.csdn.net/IOT_victor/article/details/107161603 给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,c和 d,使得a + b + c + d的值与target相等?找出所有满足条件且不重复的四元组。 注意:答案中不...
6117



被折叠的 条评论
为什么被折叠?



