18. 四数之和 leetcode---18 c++ 刷题篇

四数之和的两种解题思路,C++ 算法——四数之和 leetcode18题,经典题目。 题意: 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 这一类题目包括两数之和、三数之和、四数之和、还可以拓展到K数之和。解题时可以从两数之和以及三数之和的求解中拓展开... 阅读详情

题目

        给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。

注意:答案中不可以包含重复的四元组。

示例 1:

输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]
示例 2:

输入:nums = [], target = 0
输出:[]
 

提示:

0 <= nums.length <= 200
-109 <= nums[i] <= 109
-109 <= target <= 109

思路:

         四数之和与前面三数之和的思路几乎是一样的,嗝。(刚好前些天才写了三数之和的题解)
 如果前面的三数之和会做了的话,这里其实就是在前面的基础上多添加一个遍历的指针而已。
 会做三数之和的可以不用看下面的了。。
  
         使用四个指针(a<b<c<d)。固定最小的a和b在左边,c=b+1,d=_size-1 移动两个指针包夹求解。        
         保存使得nums[a]+nums[b]+nums[c]+nums[d]==target的解。偏大时d左移,偏小时c右移。c和d相遇时,表示以当前的a和b为最小值的解已经全部求得。b++,进入下一轮循环b循环,当b循环结束后。
         a++,进入下一轮a循环。 即(a在最外层循环,里面嵌套b循环,再嵌套双指针c,d包夹求解)。


准备工作:

         因为要使用双指针的方法,排序是必须要做der~。 时间复杂度O(NlogN).


解决重复解:

         上面的解法存在重复解的原因是因为移动指针时可能出现重复数字的情况。所以我们要确保移动指针后,对应的数字要发生改变才行哦。


时间复杂度:

        a遍历O(N)里嵌套b遍历O(N)再嵌套c,d双指针O(N)--> O(N^3)。 总比暴力法O(N^4)好些吧。

1569476546(1).png

class Solution{
	public: 
	vector<vector<int>> fourSum(vector<int>& nums, int target) {
        sort(nums.begin(),nums.end());
        vector<vector<int> > res;
        if(nums.size()<4)
        return res;
        int a,b,c,d,_size=nums.size();
        for(a=0;a<=_size-4;a++){
        	if(a>0&&nums[a]==nums[a-1]) continue;      //确保nums[a] 改变了
        	for(b=a+1;b<=_size-3;b++){
        		if(b>a+1&&nums[b]==nums[b-1])continue;   //确保nums[b] 改变了
        		c=b+1,d=_size-1;
        		while(c<d){
        			if(nums[a]+nums[b]+nums[c]+nums[d]<target)
        			    c++;
        			else if(nums[a]+nums[b]+nums[c]+nums[d]>target)
        			    d--;
        			else{
        				res.push_back({nums[a],nums[b],nums[c],nums[d]});
        				while(c<d&&nums[c+1]==nums[c])      //确保nums[c] 改变了
        				    c++;
        				while(c<d&&nums[d-1]==nums[d])      //确保nums[d] 改变了
        				    d--;
        				c++;
        				d--;
					}
				}
			}
		}
		return res;
    }
};

 

通用策略04丨ORB魔改框架+自适应动量过滤模板 1、该策略第一次尝试使用低通滤波器进行行情择时过滤,同样该方法也可以用于主进场逻辑。2、出场逻辑适用于趋势、隔日波段、高低开等行情结构,对于日线级别长度K线一定积极作用,因此大家可以根据该逻辑进行反向品种筛选。3、在资金管理方面,我注意到一个问题,以往都是按照复权价格计算,但是资金却没有复权,所以这里实际上这里应该将价格除权计算,如下图所示:由于各平台差异,回测绩效以TBQ版本为准!!!本策略仅作学习、交流使用,实盘交易盈亏投资者个人负责!!! 阅读详情

相关推荐

VSCode + Clangd 配置避坑实录:从‘红波浪线’到完美代码提示的完整心路

本文详细记录了VSCode与Clangd配置过程中的常见问题及解决方案,从编译数据库生成到参数调优,帮助C++开发者快速解决代码提示失效、头文件找不到等问题,实现完美代码补全体验。重点介绍了Clangd与LLDB的集成配置及性能优化技巧,适用于Linux和跨平台开发环境。

weixin_28829479的博客 490

LeetCode 18 四数之和 HERODING的LeetCode之路

给定一个包含 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] ] 解题思路: 初识

HERODING23的博客 317

泛微E8流程监控指南:如何用SQL实时追踪审批节点状态?

本文详细介绍了如何利用SQL实时监控泛微E8系统中的审批流程状态,包括核心数据表结构解析、全链路监控SQL实战以及智能预警机制设计。通过数据库直接查询和状态关联分析,帮助企业快速定位卡顿节点,提升流程效率。适用于需要优化OA系统流程管理的企业IT人员和业务主管。

weixin_30687051的博客 438

Leetcode刷题笔记题解(C++):18. 四数之和

思路: 在三数之和的基础上加一层循环即可,注意跳过相等的元素。 代码如下,思路也可以看看我的注释: class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { //先从小到大进行排序 sort(nums.begin(),nums.end()); //存放结果 vector..

Demo.demo的博客 332

TwinCAT 3 实战指南:从系统配置到高级运动控制

本文详细介绍了TwinCAT 3工业自动化控制平台的实战应用,从系统配置、PLC编程到EtherCAT总线配置和高级运动控制。通过倍福(Beckhoff)的TwinCAT 3平台,工程师可以高效实现复杂的工业自动化任务,包括运动控制、PLC编程等。文章还提供了常见问题排查和性能优化技巧,帮助用户提升系统稳定性和实时性。

weixin_30831529的博客 304

【医学图像分割网络】之Res U-Net网络PyTorch复现

【医学图像分割网络】之Res U-Net网络PyTorch复现 1.内容 U-Net网络算是医学图像分割领域的开山之作,我接触深度学习到现在大概将近大半年时间,看到了很多基于U-Net网络的变体,后续也会继续和大家一起分享学习。这次分享ResNet+U-Net的一个改进版,ResNet本身就是一个十分优秀的backbone,目前应用仍然十分广泛,我们融合进ResNet后,我们就可以使得U-Net进行迁移学习了。 1.将Resnet作为encoder替换U-Net原始结构 2.U-Net提出时间较早,当时还没

qq_39071739的博客 1万+

LeetCode:18. 四数之和(C++带详细注释)

LeetCode:18. 四数之和(C++带详细注释) class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>>res;//预定义结果数组 int len=nums.size();//获取数组长度; sort(nums.begin()

Axe涛的博客 520

手把手教你用Wireshark抓包分析BLE广播包:从PDU结构到AD Type实战解析

本文详细介绍了如何使用Wireshark工具抓取并分析BLE广播包,从PDU结构到AD Type的实战解析。通过硬件设备选择、软件配置、协议栈解析及高级故障排查,帮助开发者深入理解蓝牙低功耗通信机制,提升物联网设备调试效率。

weixin_30482383的博客 417

18.四数只和_C++实现

题目 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 思路 1.先把数组排序 2.固定住两个基础指针,注意去重 3.一个左指针在右边基础指针的右边,一个右指针,在数组尾部 4.如果sum>target则左移右指正,反...

spec_yue 217

从零搭建云手机:基于Docker与KVM的实战指南

本文提供了一份基于Docker与KVM从零搭建私有云手机的实战指南。详细介绍了服务器配置选择、KVM虚拟化环境检查、Docker容器部署以及通过VNC进行远程访问的全过程。该方案轻量高效,适合应用测试、手游多开及自动化脚本运行等场景,帮助用户低成本拥有高性能云端安卓设备。

weixin_29208327的博客 558

“探索thumbdata4文件的奥秘:编程中的神秘存在“

综上所述,thumbdata4文件在编程中是一个常见的存在,与图库应用程序和图片浏览器密切相关。通过使用适当的库和工具,我们可以读取和处理thumbdata4文件中的缩略图数据,以提供更好的用户体验。我们首先读取8字节的块头,其中包含了下一个缩略图块的大小。你可以根据自己的需求来定义对块数据的处理方式,例如将其保存为图像文件或进行其他的分析操作。thumbdata4文件通常以二进制格式存储,其中包含着设备上浏览过的图片的缩略图。因此,你可能需要根据具体的thumbdata4文件结构进行适当的解析和处理。

JieLun_C的博客 792

力扣(LeetCode)18. 四数之和(C++)

【墨染】双指针。模拟。

墨染 655

Debezium报错处理系列之二十一:Unable to connect: Communications link failure.The driver has not received any

Debezium报错系列之二十一:Unable to connect: Communications link failure.The driver has not received any。

zhengzaifeidelushang的博客 547

LeetCode - 18 四数之和

四数之和:固定四元组中最小两个值的索引 i,j,然后定义双指针 L = j + 1,R = len(nums) - 1,如果此时四元组之和 sum = nums[i] + nums[j] + nums[L] + nums[R]因此当 nums[i] == nums[i-1] 时,我们可以跳过,比如上图 i = 1,j=2 的过程可以跳过,因为产生的必然时重复的四元组。如上图所示,红色框部分,其中 j 的位置相同,L,R的运动过程也相同,只是 i 的位置发生了变化,但是 i 指向的元素值时没有改变的。

优快云 1136

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【优选算法必刷100题】第007~008题(双指针算法):三数之和,四数之和

本文分享了LeetCode中三数之和(15题)和四数之和(18题)的高效解法。通过排序数组后使用双指针算法,有效优化了暴力解法的时间复杂度。关键点包括:1) 排序后固定基准数;2) 在剩余区间使用双指针寻找目标值;3) 处理重复元素的去重技巧。文章提供了详细的C++代码实现和算法思路图解,帮助读者理解如何将四数问题转化为三数问题求解。适合准备算法面试的开发者学习参考。

心向往之,行必能至 1335

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LeetCode(C++)刷题计划:18-四数之和

18-四数之和 @Author:CSU张扬 @Email:csuzhangyang@gmail.com or csuzhangyang@qq.com Category Difficulty Pass rate Tags Companies algorithms Medium 36.01% array / hash-table / two-pointers linkedin ...

神奇小海螺的博客 8259

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

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

cilmy23的note 1298

力扣刷题——(三数之和、四数之和)day5

力扣刷题——(三数之和、四数之和)day5

weixin_57973719的博客 1083

《算法闯关指南:优选算法-双指针》--07三数之和,08四数之和

本文介绍了LeetCode中三数之和与四数之和问题的解题思路。通过排序+双指针算法优化暴力解法,重点讲解了去重操作的实现方法。对于三数之和,固定一个数后用双指针在剩余区间寻找两数之和;四数之和则通过固定两个数后转化为三数之和问题。文章提供了详细的C++代码实现,并附上手写算法思路笔记,帮助读者理解解题关键点。最后作者感谢读者支持,并欢迎点赞评论。

会当凌绝顶,一览众山小 1570

leetcode 18. 四数之和

四数之和题解集合排序+双指针回溯法哈希法总结 排序+双指针 建议大家先从三数之和的题解集合看起来,本方法题解基本是复制三数之和的双指针方法 思路: 两数之和呢,我们就先固定第一个数,然后移动指针去找第二个符合的,三数之和,固定一个数,双指针去找符合情况的其他两位数,那么我们四数之和,也可以先固定两个数,然后利用双指针去找另外两位数。所以我们来搞定他吧。 三数之和是,我们首先确定一个数,然后利用双指针去找另外的两个数,我们在这个题目里面的解题思路是需要首先确定两个数然后利用双指针去找另外两个数,和三数..

m0_53157173的博客 1220

DAY07|哈希表Part02|LeetCode:454.四数相加II、383.赎金信、15. 三数之和、18.四数之和

正确答案是[-2, 2, 0]和[-2, 1, 1]。两层for循环就可以得到a+b的值,并且通过使用哈希法判断0-(a+b是否在集合中出现过),这个思路确实没有问题,但是由于题目中明确说了答案中不可以包含重复的三元组,而把符合条件的三元组放到vector中再去重非常浪费时间非常复杂,很容易超时。这道题目是四个独立的数组,只要找到A[i] + B[j] + C[k] + D[l] = 0就可以,不用考虑有重复的四个元素相加等于0的情况,所以相对于题目18. 四数之和,题目15.三数之和,还是简单了不少!

ning1437589742的博客 1187

Leetcode 18. 四数之和

Leetcode 18. 四数之和 文章目录Leetcode 18. 四数之和题目解法思路一:暴力法代码思路二:双指针代码思路三:哈希表思路四:递归代码 题目 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意: 答案中...

Hoven_小明的技术栈 673

代码随想录算法训练营Day7 | Leetcode 454 四数相加Ⅱ Leetcode 383 赎金信 Leetcode 15 三数之和 Leetcode 18 四数之和

今天的四道题目稍稍有点难度,需要理解和反复记忆才行。四数相加类比于两数之和,赎金信类比于异位词,三数之和和四数之和自成体系,可以推广到n数之和。今天把STL的视频看完了,明天要继续看C++内存管理的视频,miniSTL要提上日程了。

m0_74853141的博客 1203

刷题记录Day7-哈希表(四数相加、赎金信、三数之和、四数之和)

哈希表和双指针

qq_41645729的博客 1253

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

四数之和

2401_87255690的博客 786

Leetcode刷题62-18. 四数之和(C++详细解法!!!)

题目来源:链接: [https://leetcode-cn.com/problems/4sum/submissions/] 18. 四数之和1.问题描述2.我的解决方案3.大神们的解决方案4.我的收获 1.问题描述 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target ...

qq_40858438的博客 551
上一篇: 17. 电话号码的字母组合 ---leetcode -17 c++算法
下一篇: leetcode--第 250 场周赛 1. 可以输入的最大单词数
郭晋龙
博客等级 码龄6年 940粉丝 449原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭晋龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值