[Leetcode] 15. 3Sum 解题报告

leetcode解题笔记:Two sum系列解题思路 Two Sum 3Sum 3Sum Closest Two SumGiven an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, 阅读详情

题目:

Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Note: The solution set must not contain duplicate triplets.

For example, given array S = [-1, 0, 1, 2, -1, -4],

A solution set is:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

思路:

       对于3Sum而言,即使原数组是排好序的,也需要至少O(n^2)的时间复杂度。而排序的时间复杂度是O(nlogn),不影响最终的时间复杂度,所以我们可以首先对数组进行排序,然后采用双指针扫描的方法实现第二层循环。整个算法的时间复杂度就是O(n^2),空间复杂度为O(1)。

       为了防止出现重复结果,需要注意一旦相邻元素相同,则后续元素应该跳过。详见下面代码的注释部分。另外一种简单方法是,将nums转存到一个set<int>中,然后在set<int>中完成两遍扫描。这样做的好处在于set不仅可以自动排序,而且可以自动去重。

代码:

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) 
    {
        vector<vector<int>> ret;
        if(nums.size() < 3) 
            return ret;
        sort(nums.begin(), nums.end());
        long previous = LONG_MAX;       // make sure previous is not equal to any element
        for(int i = 0; i < nums.size() - 2; ++i)
        {
            int target = - nums[i];
            if(target == previous)                          // make sure the first element is not duplicate
                continue;
            int j = i + 1;
            int k = nums.size() - 1;
            while(j < k)
            {
                if(nums[j] + nums[k] == target)
                {
                    ret.push_back(vector<int>{nums[i], nums[j], nums[k]});
                    while(j < k && nums[j] == nums[j+1])    // make sure the second element is not duplicate
                        j++;
                    while(j < k && nums[k] == nums[k-1])    // make sure the third element is not duplicate
                        k--;
                    j++;
                    k--;
                }
                else if(nums[j] + nums[k] < target)
                {
                    j++;
                }
                else
                {
                    k--;
                }
            }
            previous = target;
        }
        return ret;
    }
};


leetcode解题之 15. 3Sum Java版(结果为目标值的三个数字) 阅读详情

相关推荐

告别黑窗口!用VSCode+Native Debug调试C/C++程序,比GDB命令行舒服多了

本文介绍了如何使用VSCode配合Native Debug扩展来调试C/C++程序,替代传统的GDB命令行方式。通过可视化调试环境,开发者可以更高效地管理断点、查看变量和调用栈,大幅提升调试效率。文章详细讲解了环境配置、核心调试功能及高级技巧,帮助开发者快速上手这一现代调试工具。

weixin_26833139的博客 249

leetcode解题报告15. 3Sum

leetcode解题报告15. 3Sum题目地址 难度是medium题目描述输入一个整数数组,从中选择3个数,使得这三个数之和为0,这三个数称为一个三元组。现在要求所有满足要求的三元组。并且要求三元组之间不重复。(其中三元组里的元素是没有顺序的,即(1,2,3)和(3,2,1)是同一个三元组)我的思路首先暴力的办法是遍历所有三元组,找出满足要求的即可。但是一方面复杂度太高了O(n3)O(n^3)的复

sysu_xiaoming的博客 344

工业异常检测评价指标(I-AUROC、PRO等)

模型评价指标:TPR、FPR、Recall、ROC、AUC、AUROC、IoU、PRO、AUPRO等

qq_1532145264的博客 7431

[leetcode] 15. 3Sum 解题报告

题目链接:https://leetcode.com/problems/3sum/ Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of ze

小榕流光的专栏 694

YOLOv8损失函数升级:从CIoU到Wise-IoU v3的实战调优与避坑指南

本文详细介绍了如何将YOLOv8的损失函数从CIoU升级到Wise-IoU v3,以提升目标检测性能,特别是在小目标检测和样本不均衡场景下的表现。通过实战调优步骤和避坑指南,帮助开发者有效应用Wise-IoU v3的动态聚焦机制和单调性控制,显著提升模型精度和训练稳定性。

weixin_33737774的博客 590

得物APP破解

本文介绍了得物App(版本4.74.5)的逆向破解过程,重点分析了绕过强制更新、抓包技巧以及破解newSign参数的详细方法。首先通过断网再联网的方式绕过强制更新,然后使用SocksDroid进行抓包分析,发现首页推荐接口需要newSign参数。通过反编译定位到RequestUtils.c方法,利用Frida进行Hook验证,最终解析出newSign的生成逻辑:将请求参数加入固定字段后排序拼接,再进行MD5加密生成签名。文中提供了完整的Hook脚本和签名算法分析,仅供学习移动安全技术参考。

m0_74653634的博客 3478

【LeetCode】15. 3Sum 解题报告(Python)

题目分析: 这道题目让我想到了2Sum,所以向先固定一个数再按2Sum找,但是不可避免的出现重返列表。重复列表解决起来比较麻烦,再把结果双循环去重会TLE。所以去考虑先排序再固定一个数之后夹逼就可以了。 代码说明: 1、第一个if,如果笃定元素大于0,后面的一定都大于零(排过序),就不用再找另外两个。第二个if,目的是判断这个固定用的元素与上一次的相同避免无用功。target是固定的元素.j...

L141210113的专栏 539

ISCC练习题MISC

解题技巧:看最后括号应该是IceCTF,先用了一键解码啥也没有啊,不对不对!好像是字符频率统计,转换网站:http://quipqiup.com/有人给你发了一串信息,你能解开吗?

m0_62737381的博客 1119

【LeetCode】3Sum 解题报告

这道题凭我现有知识实在解答不上来,只好网上搜索解法,才发现 K Sum 是一类问题,但是网上没有比较简洁的代码,我想对于初学者来说,可能还是想先看看这道题怎么解,然后才有兴趣去看其扩展吧。 【题目】 Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Fin

跳出温水的青蛙 3万+

078、镜头阴影校正:LSC算法原理与标定优化

文章摘要 镜头阴影校正(LSC)是手机影像系统中的关键技术,用于解决镜头渐晕效应导致的画面边缘暗角问题。本文详细分析了LSC算法的核心原理,包括非均匀网格划分、双线性插值等关键技术点,并揭示了标定流程中的常见陷阱(光源均匀性、灰卡反射特性、温度漂移)。文章还深入探讨了增益计算的工程实现细节,以及实际调优中的关键考量因素(色差校正、动态场景适应等)。作者结合15年经验,给出了包括验证方法、网格参数设计、产线标定等实用性建议,强调LSC算法应与光学设计协同优化,才能达到最佳效果。

sundong_81的博客 41

STM32实战开发(150):基于STM32的智能电力负荷控制系统开发

本文介绍了基于STM32的智能电力负荷控制系统的设计与实现,涵盖了硬件设计、软件设计、负荷预测与控制等多个方面。该系统能够实时监控电力负荷,预测未来负荷变化,并根据预测结果自动调节电力负荷,防止电网过载或浪费。未来,我们可以进一步优化该系统,加入更多的传感器数据,提升预测算法的精度,并结合大数据与云计算技术实现更为强大的远程控制与数据分析功能。

2201_76125393的博客 712

Leetcode #18 4Sum 四数之和 解题小节+K-Sum思想

1题目理解Leetcode不少题目是成一个体系的,这道题是找四数之和等于四数之和的题,之前还有2Sum和3Sum,我也已经做了题目的小节,可以点开进行查看。 Leetcode #15 3Sum 三数之和 解题小节 Leetcode #1 Two Sum 解题小结和之前的问题一样,有如下的限制: 1、最终输出的顺序是非降序的(所以我们首先需要排序) 2、不能输出重复的解(所以我们要注意移动)

MebiuW的专栏 4148

Transformer实战(32)——Transformer模型压缩

在本节中,我们学习了如何在硬件资源受限的情况下减轻运行大模型的负担。我们介绍了如何通过蒸馏、剪枝和量化从训练好的模型中提取高效模型。预训练轻量级的通用语言模型(如 DistilBERT) 可以在各种任务上进行微调,并表现出与非蒸馏模型相当的性能。随着数据量的不断增加,我们希望模型能够更快地运行,在这方面,高效 Transformer 起着至关重要的作用。

盼小辉丶的博客 2544

【LeetCode】解题15:3Sum

LeetCode解题 15:3Sum Problem 15: 3Sum [Medium]解题思路Solution (Java)修改过程 Problem 15: 3Sum [Medium] Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all un...

Fayedily的博客 196

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Leetcode 解题报告

据说刷完leetcode是准备编程面试的第一步。想到明年可能就要开始找工作了,先准备着吧。 计划今年11月份前做完,大概平均每天2-3题,难度应该不大,贵在坚持! 代码放在github上,地址:https://github.com/xingjian-f/Leetcode-solution 简略解题报告 1 Two Sum 三种解法: 1 暴力枚举所有的两两组合,检查它们的和是否等于

勿忘初衷 1万+

jre9下载 jdk9

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

【算法】2SUM/3SUM/4SUM问题

之前就总结过一些Leetcode上各种sum问题,今天再拿出来完整得总结一番。 nSUM问题是指,在一个数组中,找出n个数相加和等于给定的数,这个叫做nSUM问题。 常见的有2SUM,3SUM,4SUM问题,还有各种SUM问题的变种. Leetcode上SUM问题包括: 1. 2SUM 15. 3Sum 16. 3Sum Closest 18.

haolexiao的专栏 2万+

[LeetCode] 15. 3Sum

原题链接: https://leetcode.com/problems/3sum/ 1. 题目描述 2. 解题思路 Java中List的用法 List是一个有序的集合,允许存储项的值为空,也允许相等值的存储项。 List&amp;amp;amp;amp;amp;lt;String&amp;amp;amp;amp;amp;gt; ex=new ArrayList&amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;gt;();

Ber03的博客 214

LeetCode 15. 3Sum 题解

本题是双指针的经典应用问题,主要考察对排序和双指针技巧的理解和使用。通过排序和双指针,我们可以有效地找到所有和为 0 的三元组,并避免重复。排序的核心思想是将数组按照升序排列,这样我们可以使用双指针来高效地查找和为 0 的三元组。双指针的核心思想是:通过移动左指针和右指针,我们可以根据当前和的大小来调整指针的位置,从而找到所有可能的组合。这种方法不仅适用于三数之和问题,还可以应用于许多其他需要查找多个元素组合的问题,例如四数之和、最接近的三数之和等。掌握排序和双指针的使用,对于解决这类问题非常重要。

cannonjinx的博客 4401

LeetCode总结——从2Sum、3Sum、3Sum Closest、4Sum到kSum

leetcode求和问题描述(K sum problem): 给你一组N个数字(nums), 然后给你一个常数(target) ,我们的目标是在这一堆数里面找到K个数字,使得这K个数字的和等于target。 注意事项(constraints): 注意这一组数字可能有重复项:比如 1 1 2 3 , 求3sum, 然后 target = 6, 你搜的时候可能会得到 两组1 2 3, 1 2 3,1...

vivian_ll的博客 382

LeetCode 15 3Sum 解题思路和python代码

检查左指针指向的数(-1)是否与下一个数(0)相等,如果相等,就要跳过重复的左指针元素;同样道理,检查右指针指向的数(2)是否与前一个数(1)相等,如果相等,就跳过重复的右指针元素。左指针从 i+1 开始,右指针从数组末尾开始,逐步向中间收缩。,将它作为第一个数,然后使用双指针方法在 i 之后的数组部分寻找另外两个数,使它们的和等于0。和还是小于0,说明左指针太小,向右移动左指针。和还是小于0,说明左指针太小,向右移动左指针。和小于0,说明左指针太小,向右移动左指针。左指针大于右指针,遍历结束。

weixin_57266891的博客 1322

【LeetCode】15. 3Sum

我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 微信公众号介绍:Microstrong(小强)同学主要研究机器学习、深度学习、计算机视觉、智能对话系统相关内容,分享在学习过程中的读书笔记!期待您的关注,欢迎一起学习交流进步! 知乎主页:https://www.zhihu.com/people/MicrostrongAI/activities Git...

Microstrong 483

LeetCode-15. 3Sum [C++]

Given an arraynumsofnintegers, are there elementsa,b,cinnumssuch thata+b+c= 0? Find all unique triplets in the array which gives the sum of zero.

贫道绝缘子的博客 443

LeetCode 15. 3Sum

LeetCode 15. 3SumDescriptionExampleCodeConclusion Description Given an array numsof n integers, are there elements a, b, c in numssuch that a + b + c = 0? Find all unique triplets in the array which g...

gq__97的博客 205

LeetCode 15. 3Sum, 三数之和 ,C#

前言 本文介绍了 LeetCode 第 15 题 , “3Sum”, 也就是 “三数之和” 的问题. 本文使用 C# 语言完成题目,介绍了2种方法供大家参考。 题目 English LeetCode 15. 3Sum Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives th

wf824284257的博客 1437

LeetCode总结:2Sum/3Sum/4Sum问题

K Sum问题:   给定一个数组nums和一个实数target,在数组nums中给出所有的K个数,使K个数之和为target。 1. LeetCode 1——2 Sum 解法1:   暴力求解:先固定一个数,然后遍历数组,找到另一个数,使两数之和为target。 vector&amp;amp;amp;amp;amp;lt;int&amp;amp;amp;amp;amp;gt; twoSum(vector&amp;amp;amp;amp;amp;lt;int&amp;amp;

Stoneplay 367
上一篇: [Leetcode] 14. Longest Common Prefix 解题报告
下一篇: [Leetcode] 16. 3Sum Closest 解题报告
魔豆Magicbean
博客等级 码龄19年 146粉丝 742原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值