news 2026/4/23 20:52:32

力扣 15.三数之和(medium)(双指针)与四数之和

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣 15.三数之和(medium)(双指针)与四数之和

15. 三数之和 - 力扣(LeetCode)

解法一:排序后暴力枚举然后利用set去重

答案中不可以包含重复的三元组,输出的顺序和三元组的顺序并不重要。根据这两点要求我们需要对数组进行排序,排序后三层for循环嵌套遍历数组可以找出所有满足(i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0)的三元组,而在这些三元组中,重复的三元组因为数组有序而完全一样(包括顺序)然后把全部的三元组一股脑扔给set容器,set会帮我们完成去重,最后输出结果。时间复杂度O(n^3) (该解法只解释思路,不做具体演示,我们主要学习下面这种解法)

解法二:排序+双指针

算法思路:

1.先对数组排序,令其变为有序,固定左侧i,定义t=-num[i],定义left,right指针,l,r分别是其所指向的值,在[left,right]区间中遍历使l+r=t

2.若l+r>t,right–,若l+r<t,left++,若l+r=t,存储三元组target,left++,ight–。l,r循环直至left>=right

3.然后i++,开始下一轮循环直至i=n(一个小优化:当num[i]>0时就可以结束循环了,之后不可能有符合条件的三元组)

处理细节问题:

1.去重

当找到符合条件的三元组时,left,right要跳过重复元素s

当使用完一次双指针算法后,i也要跳过重复元素

2.不漏

找到一种结果后不要停,缩小区间继续寻找

3.避免越界(特殊情况)

每次跳过重复元素时都要判断是否越界

代码:

classSolution{public:vector<vector<int>>threeSum(vector<int>&nums){sort(nums.begin(),nums.end());intn=nums.size();vector<vector<int>>a;for(inti=0;i<n;){if(nums[i]>0)break;// 小优化intleft=i+1,right=n-1,t=-nums[i];while(left<right){if(nums[left]+nums[right]>t)right--;elseif(nums[left]+nums[right]<t)left++;else{//找到一种结果后不要停,缩小区间继续寻找a.push_back({nums[i],nums[left++],nums[right--]});//left,right去重,每次跳过重复元素时都要判断是否越界while(left<right&&nums[left]==nums[left-1])left++;while(left<right&&nums[right]==nums[right+1])right--;}}i++;//i去重while(i<n&&nums[i]==nums[i-1])i++;}returna;}};

18. 四数之和 - 力扣(LeetCode)

四数之和与三数之和的结题思路一致,相当于三数之和外面再套一个for循环

classSolution{public:vector<vector<int>>fourSum(vector<int>&nums,inttarget){sort(nums.begin(),nums.end());intn=nums.size();vector<vector<int>>ret;for(inti=0;i<n;){//固定afor(intj=i+1;j<n;){//固定bintleft=j+1,right=n-1;//防止数据溢出longlongaim=(longlong)target-nums[i]-nums[j];while(left<right){intsum=nums[left]+nums[right];if(sum<aim)left++;elseif(sum>aim)right--;else{ret.push_back({nums[i],nums[j],nums[left++],nums[right--]});//去重1while(left<right&&nums[left]==nums[left-1])left++;while(left<right&&nums[right]==nums[right+1])right--;}}//去重2j++;while(j<n&&nums[j]==nums[j-1])j++;}//去重3i++;while(i<n&&nums[i]==nums[i-1])i++;}returnret;}};

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 10:44:49

Qwen3-Reranker-0.6B部署教程:多GPU负载均衡与显存优化配置

Qwen3-Reranker-0.6B部署教程&#xff1a;多GPU负载均衡与显存优化配置 1. 模型能力与定位&#xff1a;不只是“打分”&#xff0c;而是精准语义对齐 你有没有遇到过这样的问题&#xff1a;用向量检索召回了一批文档&#xff0c;但排在最前面的几条却和用户问题关系不大&…

作者头像 李华
网站建设 2026/4/23 10:49:07

卡通化效果不满意?三步优化调整策略

卡通化效果不满意&#xff1f;三步优化调整策略 你是不是也遇到过这样的情况&#xff1a;上传一张精心挑选的人像照片&#xff0c;点击“开始转换”&#xff0c;几秒后结果出来了——人物是变卡通了&#xff0c;但总觉得哪里不对劲&#xff1f;脸型失真、线条生硬、色彩发灰&am…

作者头像 李华
网站建设 2026/4/23 12:12:54

快速搭建中文物体检测系统,万物识别镜像实战应用

快速搭建中文物体检测系统&#xff0c;万物识别镜像实战应用 你是否也遇到过这样的场景&#xff1a;市场部急需在客户演示中实时识别办公桌上的“签字笔”“笔记本”“咖啡杯”&#xff0c;运营团队想自动标注电商商品图里的“连衣裙”“运动鞋”“蓝牙耳机”&#xff0c;而技…

作者头像 李华
网站建设 2026/4/23 10:44:55

LightOnOCR-2-1B体验:1B小模型吊打大模型,速度快3倍

LightOnOCR-2-1B体验&#xff1a;1B小模型吊打大模型&#xff0c;速度快3倍 1. 为什么这个1B模型值得你立刻试试&#xff1f; 你有没有遇到过这样的场景&#xff1a; 手里有一堆扫描版PDF合同、发票、技术手册&#xff0c;想快速转成可编辑文本&#xff0c;但传统OCR要么识别…

作者头像 李华
网站建设 2026/4/23 10:44:41

MT5中文增强工具参数详解:Top-P=0.92如何兼顾生成稳定性与表达丰富性

MT5中文增强工具参数详解&#xff1a;Top-P0.92如何兼顾生成稳定性与表达丰富性 1. 这不是“换个说法”那么简单——一个真正懂中文语义的本地化改写工具 你有没有试过让AI改写一句话&#xff0c;结果要么和原文几乎一模一样&#xff0c;要么天马行空跑偏十万八千里&#xff…

作者头像 李华