18. 四数之和(双指针)

一起玩儿物联网人工智能小车(ESP32)——48. 利用循迹模块实现循迹小车(三) 摘要:本文介绍循迹小车的接线方法及类的基础知识 阅读详情
/**
 *	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) {
		
	}
}	

保姆级教程:在Ubuntu 20.04上从源码编译Apollo自动驾驶平台(含GPU环境配置) 本文提供了一份详细的Ubuntu 20.04上从源码编译Apollo自动驾驶平台的保姆级教程,包括GPU环境配置、Docker部署和编译构建等关键步骤。通过实战经验和避坑指南,帮助开发者高效完成Apollo平台的编译和验证,适用于自动驾驶技术研究和应用开发。 阅读详情

相关推荐

IEPE传感器4mA恒流源接口电路

另外传感器的偏置电压大概在10V多点,一般接个电容把直流分量去掉。这里我们要把恒流源的电流设置在4毫安左右,R1取33Ω差不多正好。经过CR的隔直流电路后的波形是这样的。

老白的博客 6117

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。 满足要求的四元组集...

Michael是个半路程序员 1077

FreeModbus V1.6主机模式实战:如何在STM32上实现Modbus RTU主从一体通信

本文详细介绍了如何在STM32平台上利用FreeModbus V1.6开源协议栈实现Modbus RTU主从一体通信。文章深入剖析了V1.6版本主机模式的架构设计,提供了从硬件配置、串口与定时器移植到FreeRTOS操作系统适配的完整实战指南,并分享了数据缓冲区管理、多线程协同及高级调试技巧,为构建稳定可靠的工业通信网关提供了系统化解决方案。

weixin_29194255的博客 375

【20190624】【每天一道算法题】四数之和(双指针、哈希表)

问题 给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,c和 d,使得a + b + c + d的值与target相等?找出所有满足条件且不重复的四元组。 注意:答案中不可以包含重复的四元组。 示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为...

诗小葵的博客 447

浅析图像处理中的名词:Gamma 校正(Gamma变换、Gamma调整)

浅析图像处理中的名词:Gamma 校正(Gamma变换、Gamma调整)

qq_51908382的博客 1万+

初识数据结构之入门必懂——线性表(顺序表)

本文将介绍数据结构中的线性表与线性表中最简单的结构——顺序表

m0_64705485的博客 905

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) 思想:类似两数之和,两个指针 关键:如何

jyh的博客 615

Windows下MMdetection3D保姆级安装指南(含CUDA和PyTorch版本避坑)

本文提供Windows平台下MMdetection3D的完整安装指南,重点解决CUDA与PyTorch版本匹配问题。从环境准备到关键组件安装,详细介绍了CUDA Toolkit选择策略、PyTorch精准安装步骤,以及MM系列组件的安装顺序和常见错误解决方案,帮助用户顺利完成3D目标检测环境的配置。

weixin_42628941的博客 493

【双指针】专题:LeetCode 18题解——四数之和

四数之和

2401_87255690的博客 786

红绿灯背后的数学:如何用Java算出“黄金绿灯时间“?

本文探讨了城市交通信号灯配时优化的数学原理与Java实现方法。文章首先分析了信号灯配时不合理导致的交通问题,指出精确计算绿灯时长的重要性。核心内容包括:1)基于M/M/1排队模型建立车流量数学模型,通过优化算法最小化总等待时间;2)使用Java实现信号灯优化控制器,采用梯度下降法动态调整绿灯时长。文中提供了完整的Java代码实现,包括信号灯控制器基类和优化控制器类,采用原子类保证线程安全,并详细解释了关键算法原理和实现细节。该方案可为城市智能交通系统提供理论支持和技术实现参考。

墨夶的博客 1345

PoE 的三大国际标准:PoE、PoE+、PoE++

很多人知道 PoE 能“一根网线,既供电又传数据”,但鲜少有人能说清楚:PoE 供电到底分几种标准?差别有多大?哪些设备要用 PoE,哪些必须上 PoE+ 或 PoE++?今天,我们就来一次彻底的“拆解”,把 PoE 的三大国际标准——讲得明明白白,顺便也帮你厘清网络工程中的常见“供电疑惑”。

网络技术联盟站 1551

【算法专题】双指针算法之18. 四数之和(力扣)

🏆本篇主题为:【算法专题】双指针算法之18. 四数之和(力扣)

cilmy23的note 1298

YOLO格式数据集【数据增强】终极脚本 | 70+种顶级数据增强方法 | 可带标签增强

YOLO格式数据集【数据增强】终极脚本 | 70+种顶级数据增强方法 | 可带标签增强

Coding... 5503

专题一 - 双指针 - leetcode 18. 四数之和 - 中等难度

专题1 - 双指针 - 去重 - 边界控制

分享简单技术,记录点滴成长 747

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

[双指针] (四) LeetCode 18.四数之和

[双指针] [四] LeetCode 18.四数之和

好兄弟起把大狙 423

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Leetcode—18. 四数之和(双指针+哈希表+剪枝处理/DFS算法—基础算法)

给你一个由n个整数组成的数组nums,和一个目标值target。请你找出并返回满足下述全部条件且的四元组bcd你可以按返回答案。

2301_79724394的博客 488

霍尼韦尔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

想买很多漂亮衣服但是买不起的博客 264

【算法——双指针】LeetCode 18 四数之和

【算法——双指针】LeetCode 18 四数之和

weixin_44906102的博客 449

8.【LeetCode 18】四数之和 —— Java 排序 + 双指针解法详解

摘要: 题目要求在数组中找到所有不重复的四元组,使其和等于目标值。解法采用排序+双指针策略:先排序数组,然后固定前两个数,在后半部分使用双指针寻找剩余两数。通过三层循环(固定i、j,移动left和right)遍历所有可能组合,同时利用去重处理避免重复结果。时间复杂度为O(n³),空间复杂度O(1)。示例代码展示了具体实现,包括排序、双指针移动及去重逻辑。OJ链接见LeetCode题库。

2401_87122037的博客 74

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] ]

小白的博客 156

【双指针】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] ]

weixin_43955488的博客 88

算法训练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)的解法。说到去重,其实主要考虑三个数的去重。

DongVeg的博客 1033

双指针法在哈希表上的应用:LeetCode 15. 三数之和 LeetCode 18. 四数之和

题目是在一个数组内进行操作,有两个限制,第一个是各元素的索引下标不能相同,另一个是三元组的去重。题目是在一个数组内进行操作,有两个限制,第一个是各元素的索引下标不能相同,另一个是四元组的去重。

weixin_59234335的博客 375

优选算法 力扣 18. 四数之和 双指针算法的进化 优化时间复杂度 C++ 题解 每日一题

本文围绕力扣 18 题 “四数之和” 展开解析。该题要求在整数数组中找出所有不重复的四元组,使其和等于目标值。核心解法是基于 “固定元素 + 双指针”,先排序数组,通过两层循环固定前两个元素,再用双指针寻找后两个元素,将问题转化为两数之和。文中详细拆解代码逻辑,包括排序预处理、四层去重机制(固定元素与双指针的去重)、整数溢出防护等关键环节,分析了时间复杂度(O (n³))和空间复杂度,并总结了常见坑点如溢出、去重时机错误等,还指出其对解决多数之和问题的借鉴意义。

Q741_147的博客 1012

双指针—四数之和(leetcode 18)

题目描述 算法分析 代码 时间复杂度分析

guoxinian的专栏 336

双指针-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相等?找出所有满足条件且不重复的四元组。 注意:答案中不...

IOT_victor的博客 233
上一篇: 113. 路径总和 II(递归)
下一篇: 数据挖掘与知识发现
Lazy mode
博客等级 码龄10年 13粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值