LeetCode15、三数之和

Java实现 LeetCode 15 三数之和 15. 三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例: 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ] 来源:力扣(Leet... 阅读详情

三数之和

题目链接:

https://leetcode-cn.com/problems/3sum/

题目描述:
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,
使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[
  [-1, 0, 1],
  [-1, -1, 2]
]
解题思路

使用双指针法,具体步骤如下

1、对数组进行排序

2、对数组中的每个数都进行遍历,每次将本次所遍历的数字i作为基准

3、定义双指针,指针left初始值为i+1,指针right初始值为nums.length-1

4、若nums[i]+nums[left]+nums[right]=0,则记录在案,left++,right–;若三数之和大于0,则right–;若三数之和小于0,则left++;

需要注意的点:

1、去重:在遍历i的时候,若nums[i]==nums[i–],则跳过

具体实现代码
public class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        //首先对数组进行排序,冒泡排序
//        for(int x=0;x<nums.length;x++){
//            for(int y=0;y<nums.length-1;y++){
//                if (nums[y]>nums[y+1]){
//                    int flag = nums[y];
//                    nums[y] = nums[y+1];
//                    nums[y+1] = flag;
//                }
//            }
//        }
        Arrays.sort(nums);
        for(int x=0;x<nums.length;x++){
            System.out.print(" "+nums[x]);
        }
        System.out.println();
        //双指针法
        int i;
        int len=nums.length;
        List<List<Integer>> res = new ArrayList<>();
        for(i=0;i<len-2;i++) {
            //去重条件
            if (i>0&&nums[i]==nums[i-1]) continue;
            for(int left = i+1,right = len-1;left<right;){
                if (nums[i]+nums[left]+nums[right]==0){
                    res.add(Arrays.asList(nums[i],nums[left],nums[right]));
                    while(left<right&&nums[left]==nums[left+1]){
                        left++;
                    }
                    while(left<right&&nums[right]==nums[right-1]){
                        right--;
                    }
                    left++;
                    right--;
                }else if(nums[i]+nums[left]+nums[right]>0){
                    right--;
                }else{
                    left++;
                }
            }
        }
        //去重
        return res;
    }
}

总结

1、Arrays.sort实在是太好用了

2、双指针实在是太好了

3、说来说去还是弱鸡

LeetCode-15 三数之和 - 力扣 给你一个整数数组nums,判断是否存在三元组满足i!= ji!= k且j!= k,同时还满足。请你返回所有和为0且不重复的三元组。答案中不可以包含重复的三元组。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。注意,输出的顺序和三元组的顺序并不重要。[]唯一可能的三元组和不为 0。[[0,0,0]]唯一可能的三元组和为 0。 阅读详情

相关推荐

【中等】力扣算法题解析LeetCode15:三数之和

本文介绍了如何高效找出数组中所有和为0的三元组。通过排序数组后固定一个数,使用双指针技术搜索剩余两数,确保解的唯一性。关键步骤包括跳过重复元素和提前终止无效搜索。该方法时间复杂度为O(n²),空间复杂度O(1)。

ylumwd的博客 463

leetcode 力扣 15 三数之和

【代码】leetcode 力扣 15 三数之和。

douzi657的博客 356

泛微Ecology流程数据表结构解析:workflow_requestbase和workflow_currentoperator到底怎么关联查询?

本文深入解析泛微Ecology系统中workflow_requestbase和workflow_currentoperator表的结构与关联机制,提供SQL查询语句示例,帮助开发者高效查询流程数据。涵盖待办事项、已办事项、办结事项和流程监控等典型场景,并分享性能优化技巧和常见问题排查指南。

weixin_33738555的博客 807

力扣15三数之和,力扣18三数之和

力扣15三数之和,力扣18三数之和

weixin_69452463的博客 937

Coze智能体网页集成实战:从零搭建免登录AI助手

本文详细介绍了如何利用Coze Chat SDK从零开始为网站集成免登录AI助手。通过获取访问令牌和智能体ID,仅需几行JavaScript代码即可将功能完整的对话窗口嵌入网页,实现开箱即用的智能交互。文章重点讲解了核心部署步骤、会话隔离方案以及UI深度定制方法,帮助开发者快速打造贴合品牌、提升用户体验的网页AI助手。

gold8的专栏 558

论文Agile Autonomy: Learning High-Speed Flight in the Wild开源代码运行记录

​ Agile Autonomy: Learning High-Speed Flight in the Wild Learning High-Speed Flight in the Wild 论文链接:https://www.science.org/doi/10.1126/scirobotics.abg5810 代码:https://github.com/uzh-rpg/agile_autonomy 国内复现:https://github.com/Howardcl/AgileAutonomyPX4

Hanamizukimr的博客 1488

力扣LeetCode第15题三数之和

力扣LeetCode第15题三数之和

weixin_44061444的博客 425

YOLOv5_DeepSORT_Pytorch训练自己的多目标跟踪模型

1 准备 环境配置:https://blog.youkuaiyun.com/weixin_50008473/article/details/115250986?spm=1001.2014.3001.5501 YOLOv5_DeepSORT_Pytorch代码地址: https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch DeepSORT论文:https://arxiv.org/pdf/1703.07402.pdf 2 训练目标检测模型 训练自己的目标检测模

weixin_50008473的博客 1万+

力扣【LeetCode】—— 15. 三数之和【java】

题目链接:https://leetcode-cn.com/problems/3sum/ 题目:  给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 注意:  答案中不可以包含重复的三元组。 示例:  给定数组 nums = [-1, 0, 1, 2, -1, -4],  返回:[[-1, 0, 1],[-1, -1, 2]] 该题目的难点是如何保证不重复,因为题目中要求“不可以包含重复的

眉头的骰 747

数据分享:中国历年省、市、县行政区划shp(1949~2023年共计75年)

中华人民共和国县级以上行政区沿革》(三册,1949-1983年)“The Atlas of Changes of Administrative Regions of China”;《中华人民共和国行政区划沿革地图集》The yearly publications of “The Administrative Regions”, 1985-2014;每年的出版行政区划简册(1985-2014年)行政区划网:www.xzqh.org。行政区划网:www.xzqh.org。

J_Giser的博客 3686

Android Jetpack 最全面试题及参考答案

要使用 WorkManager 定义一个异步任务,以下是详细步骤。首先,需要创建一个继承自 Worker 类的自定义类,这个类代表了要执行的具体任务逻辑。// 在这里编写具体的任务逻辑,比如从网络下载文件try {在上述代码中,doWork方法就是任务的核心执行逻辑所在,这里模拟了从给定的 URL 下载文件到本地的操作,若下载成功返回,若出现异常则返回。然后,在需要调度任务的地方,比如在某个 Activity 或者 Fragment 中,通过构建 WorkRequest 来安排任务执行。

大模型大数据攻城狮的专栏 1895

力扣(LeetCode)15. 三数之和(C++/C语言)

【墨染】不想暴力递归怎么办?用对撞指针干掉超时。

墨染 2473

DeerFlow 系列教程 第十六篇 | 实战案例一——用 DeerFlow 进行深度研究

在日常使用 AI Agent 时,最常见的需求之一就是对某个主题进行全面、系统的研究。多源信息采集——不能只依赖单次搜索,需要从多个角度搜索不同来源交叉验证——不同来源的信息需要相互印证,避免单一信源的偏差结构化输出——最终产出的不是零散的信息片段,而是有组织的研究报告传统做法是人工反复搜索、阅读、整理。传统手工研究: DeerFlow 深度研究:人工搜索 → 阅读页面 → 记笔记 提交研究主题│ │▼ ▼换关键词 → 再搜索 → 再阅读 ┌──────────────────┐。

weixin_43674738的博客 161

力扣第15题:三数之和

学习目标: 力扣15. 三数之和 学习内容: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例: 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/prob

童一的博客 334

【思考模型框架】采用双钻模型:发散(桌面研究/用户访谈)→收敛(需求归类/优先级排序),输出需求规格书、追踪矩阵及产品待办清单。

设计思维双钻模型是一种以用户为中心的需求管理方法,通过"发散-收敛"的双循环确保问题定位准确、方案切实可行。第一钻石(探索→定义)聚焦"找对问题",运用用户访谈、田野调查等方法挖掘真实需求;第二钻石(开发→交付)解决"做对方案",通过原型测试、A/B测试验证可行性。该模型强调低保真验证、多团队协作和真实用户测试,避免资源浪费与伪需求开发。典型应用场景包括产品功能优化、用户体验提升等需要精准落地的需求场景。核心价值在于建立从用户痛点到解决方案的可控闭

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

15. 三数之和(力扣LeetCode)

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!这么写就是当前使用 nums[i],我们判断前一位是不是一样的元素,在看 {-1, -1 ,2} 这组数据,当遍历到 第一个 -1 的时候,只要前一位没有-1,那么 {-1, -1 ,2} 这组数据一样可以收录到 结果集里。但这里有一个问题,是判断 nums[i] 与 nums[i + 1]是否相同,还是判断 nums[i] 与 nums[i-1] 是否相同。所以这种去重 是可以不加的。

m0_73841621的博客 1412

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

day29【LeetCode力扣】15.三数之和

这是因为在内层循环中,我们会尝试找到和为0的三元组,如果当前元素和前一个元素相同,那么它们组成的三元组在上一次内层循环中已经考虑过,因此这里直接跳过,避免重复计算。实际上,对于这道题目而言,采用哈希方法并不是一个最佳选择,因为在去重过程中涉及到的细节较多,而在面试环境中很难立即编写出没有缺陷的代码。如果 c 在 set 中,则找到一个有效的三数之和,将其添加到结果向量中,并从 set 中删除 c,以避免重复添加相同的解。

canGfly的博客 1242

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

计算最大可能和:nums[i] + nums[-1] + nums[-2] = -4 + 2 + 1 = -1 < 0,说明无法找到和为0的组合,直接跳过。计算最小可能和:nums[i] + nums[i+1] + nums[i+2] = -4 + (-1) + (-1) = -6 < 0,继续。经过上述步骤,结果列表 res 中包含两个三元组:[ -1, -1, 2 ] 和 [ -1, 0, 1 ],与预期输出一致。预期输出:[[ -1, -1, 2 ], [ -1, 0, 1 ]]

q1111111da的博客 966

力扣——15三数之和

不同的三元组是 [-1,0,1] 和 [-1,-1,2]。15. 三数之和 - 力扣(LeetCode)注意,输出的顺序和三元组的顺序并不重要。答案中不可以包含重复的三元组。唯一可能的三元组和不为 0。唯一可能的三元组和为 0。,判断是否存在三元组。

2301_77433167的博客 1100

力扣(LeetCode) ——15.三数之和(C++)

解题思路包括:1)排序预处理;2)固定一个元素后使用双指针寻找匹配的另外两个元素;3)去重处理避免结果重复。通过双指针优化,算法时间复杂度为O(n²),空间复杂度O(log n)。

专注 C++ 后端开发与 Linux 系统编程,深耕 STL 原理、多线程、内存管理、网络编程与服务端开发。用通俗语言拆解晦涩知识点,持续输出高质量学习笔记、踩坑复盘与面试干货。 980

LeetCode第15题_三数之和

这道题的关键点:排序的重要性去重的处理双指针的应用优化思路:提前判断边界条件计算可能的最值进行剪枝减少不必要的遍历注意事项:数组为空或长度小于3的情况重复元素的处理整数溢出的可能。

qq_40263592的博客 1177

LeetCode 15三数之和

LeetCode 15三数之和 题目简述:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。 输入:nums = [-1, 0, 1, 2, -1, -4] 输出:[ [-1, 0, 1], [-1, -1, 2]] 思路: 将nums数组排序,先依次枚举固定一个数nums[i],利用双指针left和right指向数组首尾查找另外两数 当le

XBlog 189

力扣15:三数之和

力扣第15题双指针C解法,运行时间0ms,打败100%!

weixin_48941116的博客 1138

【力扣LeetCode】15 三数之和

题目描述(难度中) 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ] 链接 https:...

Jiewang的博客 266

LeetCode15-三数之和

LeetCode15-三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]...

lyd1995的博客 229

力扣15.三数之和(java)

力扣15.三数之和题目思路代码 LeetCode笔记汇总 题目 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1: 输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,1]] 示例 2: 输入:nums = [] 输出:[] 示例 3: 输入:nums = [0] 输出:[] 提示: 0 <=

k_surge的博客 453
上一篇: SpringMVC入门1——框架的基本流程
下一篇: LeetCode53、最大子序和
code_AC
博客等级 码龄12年 255粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值