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

父子Agent架构:解决AI系统上下文污染的技术方案 在AI系统设计中,上下文管理是核心挑战之一。传统单Agent架构在处理复杂任务时,常面临上下文无限膨胀导致的信息淹没和性能下降问题。父子Agent架构通过职责分离和上下文隔离机制,采用分而治之的思想,将大任务拆解为多个子任务由专门子Agent处理。该架构中父Agent负责任务规划和结果汇总,子Agent执行具体任务后立即销毁中间状态,通过精炼摘要进行通信。这种设计不仅能有效控制上下文长度,还能提升系统稳定性和执行效率,特别适用于编程辅助、自动化测试等需要多步骤处理的场景。父子Agent架构体现了计算机科学中 阅读详情

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


18. 四数之和

image-20231102145904421

题目解析

(1) 从一个数组中找一个目标值target

(2) target = nums[a] + nums[b] + nums[c] + nums[d]

解题思路

和上一道题三数之和一样, 我们把四数之和 转换 为两数之和即可.

解法: 双指针

首先固定两个数, 再从余下的数中找出两个数即可.

如图中操作, 和 两数之和、三数之和操作类似,再多说也没有意义。

image-20231102152557754

做过前两道题,理解图中思路和去重思路,可以实现代码后再来看下面的内容。


代码实现
class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        vector<vector<int>> ret;
        sort(nums.begin(), nums.end());
        int n = nums.size();
        for(int i = 0; i < n; )
        {
            for(int j = i + 1; j < n;)
            {
                int left = j+1, right = n-1;
                while(left < right)
                {
                    long sum = nums[left] + nums[right],
                    new_target = (long)target - nums[i] - nums[j];
                    if(sum > new_target) right--;
                    else if(sum < new_target) left++;
                    else
                    {
                        ret.push_back({nums[i], nums[j], nums[left], nums[right]});
                        left++, right--;
                        while(left < right && nums[left] == nums[left-1]) left++;
                        while(left < right && nums[right] == nums[right+1]) right--;
                    }
                }
                j++;
                while(j < n && nums[j] == nums[j-1]) j++;
            }
            i++;
            while(i < n && nums[i] == nums[i-1]) i++;
        }
        return ret;
    }
};

image-20231102152843754

总结

细节1:四数之和即为多一个固定的数+三数之和

细节2:数据范围太大,即改定义long。

细节3:与三数之和相比,这里的target不是固定的,所以即使为正数也不必结束循环。

细节4:两个固定的数i,j都需要进行去重。

用Python爬取大连商品交易所期货实时行情:从入门到实战 python复制编辑# utils.py"豆粕": "M0","铁矿石": "I0","聚乙烯": "L0","玉米": "C0","聚丙烯": "PP0","棕榈油": "P0"本项目展示了:✅ 如何从新浪财经 API获取主力合约实时数据✅ 使用Python异步爬虫技术) 提升效率✅ 利用pandas和matplotlib进行结构化分析与可视化✅ 具备良好的扩展性,可对接金融、农业、能源等数据需求场景✅ 可作为期货量化策略数据源✅ 可嵌入自动化报告系统。 阅读详情

相关推荐

深入解析SPLL单相软件锁相环:从SOGI原理到PI系数调优实践

本文深入解析SPLL单相软件锁相环技术,从SOGI原理到PI系数调优实践,详细介绍了其在数字电源设计中的应用。通过数学推导和实际调试经验,帮助工程师快速掌握锁相环的核心参数计算和优化方法,提升电网相位追踪的精确度和响应速度。

weixin_30316097的博客 384

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

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

cilmy23的note 1298

嵌入式开发必备:手把手教你用DB-9连接器搞定RS-232串口通信(附万用表测试技巧)

本文详细解析了嵌入式开发中RS-232串口通信的硬件连接核心。从DB-9连接器的引脚定义入手,深入讲解DTE与DCE设备角色,明确直连线与交叉线的选择法则,并重点分享了使用万用表进行线缆连通性测试、电压测量及故障诊断的实战技巧,帮助开发者彻底掌握串口通信的硬件连接与排查方法。

tgb345678的博客 1168

四数之和

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

qq_27634079的博客 194

泛微E10 eBuilder低代码平台避坑指南:新手最容易犯的5个错误及解决方案

本文针对泛微E10 eBuilder低代码平台的新手开发者,总结了5个最常见错误及解决方案,包括表单联动配置、流程设计权限、动作流时序、数据加工类型转换和权限管理过度配置等问题。通过实战经验和代码示例,帮助开发者避开常见陷阱,提升开发效率。

weixin_30919429的博客 540

触摸屏蓝牙控制

使用杰理芯片通过蓝牙实现触摸屏功能,需要结合触摸屏数据采集、蓝牙数据传输以及移动端应用的实现。

m0_46145044的博客 1109

代码随想录算法训练营第七天|454.四数相加II,383. 赎金信 ,15. 三数之和,18. 四数之和

因为对于前一个值来说,left和right所找的范围涵盖了所有它后面的那些数,这包含了当前的数所要找的另外left和right的范围,所以上一个数已经把当前的数可能找到的结果涵盖了。题目思路:可以把四组数组两两相加,记录下前两组所有的{和:和的次数},存入字典中。然后将后两组每个数两两相加后,从字典中查询是否存在两数和的相反数,若有,count加一。left:如果当前和left的后一位相同,则再往前,不然,由于i是固定的,如果left还是一样的,那么三元组也固定了,造成重复。题目链接:383. 赎金信。

Huiwen18的博客 118

从零开始学嵌入式之STM32——1.什么是STM32

它是ST公司推出的一系列单片机的统称。ST----指的是ST公司----意法半导体。意法半导体,成立于1987年,是由意大利的SGS微电子公司和法国的Thomson半导体公司合并而成。ARM目前主要是ARM架构处理器及外围组件的电路设计方案,知识产权授权的形式收取费用,其他公司根据ARM的方案设计出CPU产品。,它以应用为核心,软硬件可裁剪,旨在实现对设备的控制、监测或辅助功能,区别于通用计算机(如 PC、服务器)的 “一机多用” 属性。在嵌入式领域,目前主流的是cortex-M3内核推出的芯片。

qshdyy的博客 1858

LeetCode-18 四数之和

题目:18. 四数之和 难度:中等 分类:数组 解决方案:双指针 今天我们学习第18题四数之和,这是一道中等题。像这样数组的题目经常作为面试题来考察面试者算法能力和写代码能力,因此最好能手写出该题。下面我们看看这道题的题目描述。 题目描述 给定一个包含n个整数的数组nums和一个目标值target,判断nums 中是否存在四个元素a,b,c和d ,使得a + b + c + d的值与 tar...

jacob2359的博客 234

uniapp [安卓苹果App端] - 详细实现手机蓝牙连接打印机及打印票据小票/标签/面单/热敏小票订单/快递单等通用兼容适配解决方案,Uniapp对接蓝牙打印机支持各种主流品牌及打印指令,强悍插件

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果app,蓝牙打印机,uniappAPP实现通过蓝牙连接打印机打印,uniapp蓝牙连接打印机,安卓蓝牙打印插件,蓝牙打印机,蓝牙ble低功率及高功率打印机小票、标签、面单打印,手机PDA蓝牙打印插件,连接蓝牙打印机,蓝牙连接,打印文本、图片、条码、二维码,兼容斑马打印机、佳博打印机,TSC打印机,免费蓝牙打印机组件,蓝牙打印条码,蓝牙打印机连接,热敏蓝牙打印机,便携式打印机,打印机搜索不到,连接失败,发送打印命令

🏆 前端领域优质创作者 1万+

SpringBoot整合LangChain4j实现RAG检索实战详解

本文介绍了使用LangChain4j框架在Java生态中构建RAG(检索增强生成)应用的最佳实践。作为最接近Python LangChain的Java实现,LangChain4j提供了文档解析、向量化存储到检索增强的全套组件,并与SpringBoot深度集成。文章通过电商智能客服场景,详细演示了从零搭建RAG系统的完整流程:包括使用PostgreSQL+pgvector作为生产级向量数据库、文档加载与向量化处理、声明式AI服务实现以及查询压缩、结果重排等进阶优化技巧。同时对比了内存模式与生产级向量库的差异,

分享AI、区块链技术及应用,未来已来 432

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

到了这里就是最重要的一步,前面已经把nums[i]的值去重了,这里就要把nums[left],nums[right]的值也要去重,因为left是前进的,right是后退的,所以当nums[right]==nums[right-1]时,right--,过滤掉下一个要加的nums[right]值,同理left则是 当nums[left]==nums[left+1]时,left++。因为题目是找一个数组中三个数的和,而且同一个位置的数不能重复出现(就是题目中的i,j,k三个位置),但是不同位置的数值可以重复。

cccoffer的博客 1072

【人工智能】拒绝焦虑,理性突围:AI 时代 Java 工程师的职业重构与进化指南

摘要:在AI技术快速发展的背景下,Java工程师面临职业转型挑战。本文通过MECE原则解构工作内容,划分高替代风险区(如CRUD开发)、高增效潜能区(如逻辑优化)和高核心壁垒区(如架构设计),指出AI对不同任务的影响程度。从劳动经济学视角分析行业将呈现K型分化,初级执行者被替代,而精通AI协作的全栈工程师需求增长。文章强调警惕过度依赖AI导致认知能力退化,并提出转型路径:掌握AI驱动开发(AIDD)、深耕领域驱动设计(DDD)、拓展全流程能力及AI原生应用开发。最终结论指出,未来的核心竞争力在于结合AI工具

奶爸的编程之路,也就一周冷个三天 138

​ leetcode 18. 四数之和 medium​

leetcode18. 四数之和 medium 题目描述: 给你一个由 n 个整数组成的数组nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组[nums[a], nums[b], nums[c], nums[d]](若两个四元组元素一一对应,则认为两个四元组重复): 0 <= a, b, c, d< n a、b、c 和 d 互不相同 nums[a] + nums[b] + nums[c] + nums[d] == target 你可以按...

speargod的博客 177

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

双指针练习:四数之和

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target。请你找出并返回满足下述全部条件且。2.在这个数 a 的后面区间上,利用「三数之和」找到三个数,使这三个数的和等于 target - a 即可。输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]输入:nums = [1,0,-1,0,-2,2], target = 0。输入:nums = [2,2,2,2,2], target = 8。输出:[[2,2,2,2]]1.一次固定一个数a;

2202_75331338的博客 350

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

LeetCode 18. 四数之和

for.i循环中判断是否跳出循环的条件: nums[i] > target && target > 0,因为存在负数可能(如: -5, -4, -3 , -2, -1, 0;target = -8,-5 > -8,但实际上是存在满足可能的),所以target必须大于0时才能判断。​ 当前nums[i] + nums[j] > target,但红色部分存在元素满足target,所以必须使用break跳出循环,而不是return返回res数组。先将nums数组排序后遍历,其中需要注意如下几点。

Cicada_9的博客 303

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

力扣第18题“四数之和”(python未解决)

这题和前几题类似,我就想用双指针,然后设置了个外层双指针,和内层双指针,最后发现,内层双指针还好,外层双指针无法判断缩放方向,不知道左缩还是右缩放,测试里面发现了,但是解决不了qaq,最终还是没有做出来(理论上我感觉如果能判断外层缩放方向,时间复杂度低一点)

m0_60689417的博客 326

代码随想录训练营第六天| LeetCode 454. 四数相加II 383.赎金信 15.三数之和 18.四数之和

使用排序+双指针的方法,经过排序后,只需判断num[i]+num[left]+num[right]与0的关系即可。大于0就right左移,小于0就left右移,等于0时输出结果。对于四个数组,先对前两个数组进行遍历,求出这两个数组元素两两相加之和,并将加和与出现次数形成字典映射,再遍历剩下两个数组,查找dict中是否出现过0-nums3-nums4,若出现过,则cnt加上出现过的频数。思路同上题,依旧使用排序+双指针的方法,先计算num[i]+num[j]的和,再使用left和right简化计算。

2201_75859438的博客 289

18. 四数之和 ●●

18. 四数之和 ●● 双指针

chenyfan_blog 201

【LeetCode】来玩玩四数之和吧

对应 力扣 18. 四数之和,在解出了三数之和的基础上体验四数之和的神秘之处

做技术人 · 产优质博客 · 找好工作 384

刷题随笔 Day7

力扣刷题

NOT_FOUND101的博客 369

leetcode18. 4Sum

4Sum 思路: 关键在于去重,再3sum和2sum中都应该主意去重

慕鹞 144

Leetcode 18. 4Sum

题目描述:找出数组中任意4个数和为target的组合,不得重复。 题目链接:Leetcode 18. 4Sum 思路:基于3Sum做待定,相当又套了一层循环。 当然,也可以暴力列举 3 3 个的情况来达到目的。 代码如下 // Author: Huahua class Solution { public: vector&lt;vector&lt;int&gt;&gt; fourSum(...

Za七杂⑧ 155

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

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

四数之和

2401_87255690的博客 786

LeetCode第18题_四数之和

这道题的关键点:理解三数之和到四数之和的扩展处理整数溢出问题高效的剪枝策略优化策略:添加更多的剪枝条件预处理边界情况避免重复计算注意事项:整数溢出的处理去重的正确性边界条件的处理。

qq_40263592的博客 1801
上一篇: [双指针] (三) LeetCode LCR 179. 查找总价格为目标值的两个商品 和 15. 三数之和
下一篇: [动态规划] (三) LeetCode 746. 使用最小花费爬楼梯
沉着冷静2024
博客等级 码龄5年 669粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值