leetcode:三数之和---双指针

news2024/12/23 23:27:33

问题:

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

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

示例:

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。

示例 2:

输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。

示例 3:

输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。

提示:

3 <= nums.length <= 3000

-105 <= nums[i] <= 105

代码(思路在代码上注释了):

 public List<List<Integer>> threeSum(int[] nums) {
        //排序,方便后续双指针移动
        Arrays.sort(nums);
        //返回值类型
        List<List<Integer>>lists=new ArrayList<>();
        //定义集合里面的集合,数组内容将会进入的集合
        List<Integer>list;
        //数组的长度
        int len=nums.length;
        //后续使用的三个指针,其中a为定。b,c为动,sum为三个数之和
        // a,b,c同时为数组索引
        int a,b,c,sum;
        //循环遍历
        for(int i=0;i<len-2;i++){
            //a,b,c赋初位置
            a=i;b=i+1;c=len-1;
            if(nums[a]>0){
                //如果nums[a]大于0那么再加两个大于0的数还是大于0
                continue;
            }
            if(a>0&&nums[a-1]==nums[a]){
                //当a走到下一个时避免与上一个相同
                continue;
            }
            while(b<c){
                //求和
                sum=nums[a]+nums[b]+nums[c];
                if(sum>0){
                    //大于0,则num[c]过大c--;
                    //同时避免相同
                    //此处建议这样写,c--单独写会超时
                    while(b<c&&nums[c]==nums[--c]);
                }else if(sum<0){
                    //小于0,则num[b]过小b++;
                    //同时避免相同
                    //此处建议这样写,b++单独写会超时
                    while(b<c&&nums[b]==nums[++b]);
                }else{
                    //sum=0时,加入内层集合
                    //注意每次创建新的内部集合(List<List<Integer>>此处是泛型)
                    //就当作内部和外部(不是准确这种说法)
                    list=new ArrayList<>();
                    list.add(nums[a]);
                    list.add(nums[b]);
                    list.add(nums[c]);
                    //将内部集合放入外层集合
                    //注意外层集合创建一次即可
                    lists.add(list);
                    //此处是为了避免出现相同的内部集合
                    while(b<c&&nums[b]==nums[++b]);
                    while(b<c&&nums[c]==nums[--c]);
                }
            }
        }
        //最终返回外层集合
        return lists;
    }

结果:

相似双指针题:

这道比较简单:

leetcode:最接近的三数之和---(双指针,排序,数组)-CSDN博客

由于这道题最终结果只有一个,所以作者我没有去重写while判断

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1409375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里Animate Anyone:任何静态图像都能动起来,让C罗、梅西、内马尔一起跳科目三!

目录 前言 相关链接 摘要 方法 效果展示 为各种角色制作动画 比较 更多应用 前言 2024年一开年&#xff0c;社交媒体和朋友圈就被一系列惊艳舞蹈视频占领了。钢铁侠跳起了科目三&#xff0c;马斯克也在摆着网红舞步&#xff0c;这些大约10秒的视频都是借助大模…

C# Socket通信从入门到精通(16)——单个同步UDP服务器监听多个客户端C#代码实现

前言: 我们在开发UDP通信程序时,有时候我们也需要开发UDP服务器程序,这个服务器只需要和一个客户端实现通信,比如这篇博文C# Socket通信从入门到精通(15)——单个同步UDP服务器监听一个客户端C#代码实现,但是在实际项目中有的时候需要和多个客户端进行通信,这时和一个…

Pandas实践指南:从基础到高级数据分析

Pandas实践指南&#xff1a;从基础到高级数据分析 引言Pandas基础1. 安装和基本配置2. DataFrame和Series的基础3. 基础数据操作 数据清洗与预处理1. 缺失值处理2. 数据转换3. 数据过滤 数据分析与操作1. 数据聚合和分组操作2. 时间序列数据处理3. 条件逻辑和数据分割 高级数据…

将AWS iot消息数据发送S3

观看此文章之前&#xff0c;请先学习AWS iot的数据收集&#xff1a; 使用Linux SDK客户端向AWS Iot发送数据-CSDN博客 上述的文章向大家展示了如何从客户端向AWS iot发送数据&#xff0c;那么数据收到之后&#xff0c;我们如何通过AWS的服务进行数据处理或者保存呢&#xff1…

Unity - gamma space下还原linear space效果

文章目录 环境目的环境问题实践结果处理要点处理细节【OnPostProcessTexture 实现 sRGB 2 Linear 编码】 - 预处理【封装个简单的 *.cginc】 - shader runtime【shader需要gamma space下还原记得 #define _RECOVERY_LINEAR_IN_GAMMA】【颜色参数应用前 和 颜色贴图采样后】【灯…

【C#】基础巩固

最近写代码的时候各种灵感勃发&#xff0c;有了灵感&#xff0c;就该实现了&#xff0c;可是&#xff0c;实现起来有些不流畅&#xff0c;总是有这样&#xff0c;那样的卡壳&#xff0c;总结下来发现了几个问题。 1、C#基础内容不是特别牢靠&#xff0c;理解的不到位&#xff…

vivo 海量基础数据计算架构应用实践

作者&#xff1a;来自 vivo 互联网大数据团队 本文根据刘开周老师在“2023 vivo开发者大会"现场演讲内容整理而成。公众号回复【2023 VDC】获取互联网技术分会场议题相关资料。 本文介绍了vivo在万亿级数据增长驱动下&#xff0c;基础数据架构建设的演进过程&#xff0c;…

如何创建以业务为中心的AI?

AI是企业的未来&#xff0c;这一趋势越来越明显。各种AI模型可以帮助企业节省时间、提高效率并增加收入。随着越来越多的企业采用AI&#xff0c;AI很快就不再是一种可有可无的能力&#xff0c;而是企业参与市场竞争的必备能力。 然而&#xff0c;作为一名业务决策者&#xff0c…

【jetson笔记】torchaudio报错

原因是因为pip安装的包与jetson不兼容导致 自己安装或者cmake编译也会报错 需要拉取官方配置好的docker镜像 拉取docker镜像 具体容器可以看官网&#xff0c;按照自己需求拉取即可 https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-ml 如果其他包不需要只需要torc…

【学习笔记】遥感影像分类相关精度指标

文章目录 0.混淆矩阵1. 精度名词解释2. Kappa系数3.举个栗子参考资料 0.混淆矩阵 混淆矩阵是分类精度的评定指标。是一个用于表示分为某一类别的像元个数与地面检验为该类别数的比较阵列。 对检核分类精度的样区内所有的像元&#xff0c;统计其分类图中的类别与实际类别之间的…

来自世坤!寻找Alpha 构建交易策略的量化方法

问&#xff1a;常常看到有人说Alpha seeking&#xff0c;这究竟是什么意思&#xff1f; 推荐这本《Finding Alphas: A Quantitative Approach to Building Trading Strategies》。我拿到的PDF是2019年的第二版。来自WorldQuant&#xff08;世坤&#xff09;的Igor Tulchinshky…

【数据结构与算法】栈(Stack)之 浅谈数组和链表实现栈各自的优缺点

文章目录 1.栈介绍2. 哪种结构实现栈会更优&#xff1f;3.栈代码实现&#xff08;C语言&#xff09; 往期相关文章&#xff1a; 线性表之顺序表线性表之链表 1.栈介绍 栈是一种特殊的线性表&#xff0c;只允许在栈顶&#xff08;Top&#xff09;进行插入和删除元素操作&#…

Toolbar

记录一下遇到的问题 Toolbal 使用过程中左右出现间隙 代码&#xff1a; <com.google.android.material.appbar.AppBarLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:t…

SAP 消息编号 KI235

在执行AFAB折旧运行的时候&#xff0c;折旧没有运行出来 通过AFBP查询&#xff0c;出现一下报错 原因是因为在ASCET当中没有配置科目分配对象&#xff0c;所以系统无法把折旧费和CO&#xff08;成本中心&#xff09;关联起来 “科目设置”必选勾选 重新运行AFAB &#xff0c;就…

【新书推荐】2.4节 数据宽度

本节内容&#xff1a;计算机受制于物理器件的制约&#xff0c;存储或读写数据的宽度是有长度限制的&#xff0c;通常我们使用数据位的位数来表示数据宽度&#xff0c;如8位、16位、32位、64位等。 ■计算机计数与数学计数的区别&#xff1a;数学中的数据可以是无穷大或无穷小&a…

01.领域驱动设计:微服务设计为什么要选择DDD学习总结

目录 1、前言 2、软件架构模式的演进 3、微服务设计和拆分的困境 4、为什么 DDD适合微服务 5、DDD与微服务的关系 6、总结 1、前言 我们知道&#xff0c;微服务设计过程中往往会面临边界如何划定的问题&#xff0c;不同的人会根据自己对微服务的理 解而拆分出不同的微服…

解读IP风险画像标签:深度洞察网络安全

在当今数字化的世界中&#xff0c;网络安全成为企业和个人关注的焦点。IP风险画像标签作为网络安全的利器&#xff0c;扮演着深度洞察网络风险的角色。本文将深入解读IP风险画像标签&#xff0c;揭示其在网络安全领域的重要性和功能。 1. IP风险画像标签是什么&#xff1f; I…

Kubernetes/k8s之安全机制:

k8s当中的安全机制 核心是分布式集群管理工具&#xff0c;容器编排&#xff0c;安全机制核心是:API SERVER作为整个集群内部通信的中介&#xff0c;也是外部控制的入口&#xff0c;所有的安全机制都是围绕api server开设计的。 请求api资源 1、认证 2、鉴权 3、准入机制 三…

Java设计模式-装饰器模式(10)

大家好,我是馆长!今天开始我们讲的是结构型模式中的装饰器模式。老规矩,讲解之前再次熟悉下结构型模式包含:代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式、组合模式,共7种设计模式。。 装饰器模式(Decorator Pattern) 定义 装饰(Decorator)模式…

npm安装卡住问题(最新版)

npm安装卡住问题(最新版) 背景&#xff1a; ​ 最近这两天用npm安装一些包的时候&#xff0c;发现一直卡住&#xff1a; 报错&#xff1a; idealTree:npm: sill idealTree buildDeps之前能用的现在不能用了&#xff0c;我一想&#xff0c;是不是源头的问题&#xff0c;还真是…