LeetCode:15. 三数之和

news2024/9/29 3:19:01

15. 三数之和

  • 1)题目
  • 2)思路
  • 3)代码
  • 4)结果

1)题目

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != kj != 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

2)思路

数组先进行排序,[-1,0,1,2,-1,-4]
-4, -1, -1, 0, 1, 2
 i   j            k
要保证最小那个不能大于0,最大那个不能小于0,否则直接返回。
在i不变的情况下
i+j+k<0 说明j小了,因为下个字母也是-1,要右移两次
最后j=k时,i右移一位,j、k重新赋值
-4, -1, -1, 0, 1, 2
     i   j        k
这时i+j+k=0,[-1,-1,2]存入链表,j、k各往里移动一位,并做去重处理
-4, -1, -1, 0, 1, 2
     i      j  k
此时i+j+k=0,[-1,0,1]存入链表,j、k各往里移动一位,发现 j>k,i右移一位(去重),j、k重新赋值
-4, -1, -1, 0, 1, 2
            i  j  k
最后三个不满足条件,结束代码,最后结果为[[-1,-1,2],[-1,0,1]]

3)代码

public List<List<Integer>> threeSum(int[] nums) {
    List<List<Integer>> lists = new ArrayList<>();

    int length = nums.length;
    if (length < 3 || length > 3000) return lists;

    // 数组排序
    Arrays.sort(nums);
    // 全部数为正或者为负,则不存在三元组
    if (nums[0]>0 || nums[length-1]<0) return lists;

    for (int i = 0; i < length; i++) {
        if (nums[i]>0) break; // 当前数大于0,后边不存在三元组

        int j = i+1;
        int k = length-1;

        while (j<k) {
            int sum = nums[i]+nums[j]+nums[k];
            if (sum == 0) {
                ArrayList<Integer> list = new ArrayList<>();
                list.add(nums[i]);
                list.add(nums[j]);
                list.add(nums[k]);
                lists.add(list);
                while (j<k && nums[k] == nums[k-1]) k--; // 去重处理
                while (j<k && nums[j] == nums[j+1]) j++; // 去重处理
                k--;
                j++;
            }else if (sum > 0) {
                k--;
            }else {
                j++;
            }
        }
        while (i+1<length && nums[i] == nums[i+1]) i++; // 去重处理
    }

    return lists;
}

4)结果

在这里插入图片描述

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

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

相关文章

【Nginx】核心配置文件结构

文章目录Nginx核心配置文件结构全局块user指令work process指令其他指令events块events指令配置实例http块定义MIME-Type自定义服务日志其他配置指令server块和location块Nginx服务器基础配置实例Nginx核心配置文件结构 从前面的内容学习中&#xff0c;我们知道Nginx的核心配置…

给力!低代码开发平台广州流辰信息科技助您增辉创价值!

低代码平台开发公司流辰信息深耕行业多年&#xff0c;一直以市场为导向&#xff0c;凭借敏锐的市场洞察力砥砺前行、拼搏进取&#xff0c;提升研发创新能力&#xff0c;广州流辰信息科技与各新老客户朋友风雨同舟&#xff0c;携手共创宏伟新蓝图&#xff01; 一、熔铸前沿科技 …

kettle的安装以及注意(迭代中....)

1、下载 kettle的官网下载地址&#xff1a;Pentaho from Hitachi Vantara - Browse Files at SourceForge.net 如果需要下载其他版本&#xff1a; 直接点击对应的版本Name&#xff08;8.0以下的实在Data Integration文件夹里面&#xff09;进去&#xff0c;再选择client-too…

【C++】代码调试的学习笔记

1. IO输出调试&#xff1a;输出重定向 在《第八期-C基础与深度解析》课程中&#xff0c;老师使用了“输出重定向”的语句来查看cout和cerr的结果&#xff1a; ./HelloWorld >txt1 2>txt2 代码含义&#xff1a;将程序HelloWorld的标准输出stdout重定向至文件txt1&#xf…

百趣代谢组学分享:从SWATH到MRM:一种新型高覆盖度靶向代谢组学技术

百趣代谢组学文献分享&#xff0c;SWATHtoMRM: Development of High-Coverage Targeted Metabolomics Method Using SWATH Technology for Biomarker Discovery&#xff0c;是由中国科学院生物与化学交叉研究中心&#xff0c;Dr. Zheng-Jiang Zhu课题组发表在AC上的一篇技术型文…

verilog学习笔记- 3)SignalTap II 软件的使用

目录 SignalTap II简介&#xff1a; SignalTap II使用&#xff1a; SignalTap II简介&#xff1a; SignalTap II 全称 SignalTap II Logic Analyzer&#xff0c;是第二代系统级调试工具&#xff0c;可以捕获和显示实时信号&#xff0c;是 一款功能强大且极具实用性的 FPGA 片…

IO模型详解

什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll跟IO模型有什么关系?有几种经典IO模型呢?BIO、NIO、AIO到底有什么区别的? 什么是IO呢? IO,英文全称是Input/Output,翻译过来就是输入/输出。平时我们听得挺多,就是什么磁盘IO,网络I…

LCHub:2023年低代码开发平台市场规模将增长25%至100亿美元

随着企业希望变得更加敏捷、业务流程更加自动化,并创建新的Web和移动应用来满足消费者的需求,自动化开发工具正在成为关键因素,尤其在IT人才持续短缺的情况下。 根据调研机构最近进行的一项研究,面对持续的IT技能短缺,低代码和无代码平台等能够实现流程自动化并使员工能…

便捷生活,你我共享 | 美格智能Cat.1模组为共享经济赋能

近年来&#xff0c;共享经济在国内的兴起&#xff0c;主要基于两大优势&#xff0c;一是资源共享&#xff0c;为人们的生活带来便捷&#xff1b;二是绿色低碳&#xff0c;符合社会的发展潮流。作为近年来经济发展的新业态&#xff0c;共享经济的快速普及&#xff0c;以及带来的…

SpringMVC的请求参数传递

1&#xff0c;简单参数类型 单个参数 发送&#xff1a; http://localhost/commonParam?nameitcast接收&#xff1a; Controller public class UserController {RequestMapping("/commonParam")ResponseBodypublic String commonParam(String name){System.out.pr…

LeetCode:12. 整数转罗马数字

12. 整数转罗马数字1&#xff09;题目2&#xff09;思路3&#xff09;代码4&#xff09;结果1&#xff09;题目 罗马数字包含以下七种字符&#xff1a;I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V …

带有数字化伪装外观,全新ID.7轿车即将全球首发

一切就绪&#xff0c;ID.7即将出场&#xff01;今年的CES展会将于2023年1月5日至8日在拉斯维加斯举行。展览期间&#xff0c;大众汽车集团&#xff08;美国&#xff09;将展出基于模块化电驱动平台&#xff08;MEB&#xff09;打造的首款纯电三厢轿车。展车将采用智能伪装外观&…

Vue3+TS封装axios

1.实现最基础的封装 将其封装为一个类&#xff0c;而不是一个函数的原因是因为类可以创建多个实例&#xff0c;适用范围更广&#xff0c;封装性更强一些。 index.ts // index.ts import axios from axios import type { AxiosInstance, AxiosRequestConfig } from axiosclas…

爬虫学习-selenium模块

与爬虫的关联可以便携的获取网站中动态加载的数据便携实现模拟登录基于游览器自动化的一个模块&#xff08;按键精灵脚本&#xff09;使用流程环境安装pip install selenium下载一个游览器的驱动程序&#xff1a;谷歌浏览器驱动安装 - 琳达的博客 - 博客园 (cnblogs.com)from s…

测试开发 | TestNG 与 Junit 对比,测试框架如何选择?

TestNG 和 Junit 作为两大流行的测试框架&#xff0c;有哪些区别&#xff1f;各有哪些优缺点&#xff1f;该如何选择呢&#xff1f;这里简要总结下&#xff1a;1. Junit 更适合隔离性比较强的单元测试&#xff1b;2. TestNG 是比 Junit 涵盖功能更全面的测试框架&#xff0c;具…

世界第一虚拟乐队举办了一场 AR 音乐会 #Gorillaz

“世界第一虚拟乐队” 是谁&#xff1f;23 年前&#xff0c;一支名为 Gorillaz 的乐队在英国埃塞克斯横空出世。和当时主流乐队形式不同的是&#xff0c;这支乐队以虚拟形象出现&#xff0c;凭借着过硬的音乐制作实力和别具一格的虚拟乐队形象&#xff0c;不久后就席卷了全球&a…

如何打造敏捷项目管理团队?【金曼说4】

曾经乔布斯说过他此生最骄傲的事不是创造了苹果&#xff0c;而且团队。由此也说明团队的重要性。一支优秀的团队能打造出无数优秀的产品和项目。无论是在商场还是战场上&#xff0c;快速反应和适应能力都至关重要&#xff0c;在技术和干扰性力量导致变革速度加快的时代更是如此…

HTML 常见面试题

一、HTML5&#xff08;超文本标记语言&#xff0c;第五次重大修改&#xff09;二、HTML5新特性①&#xff1a;新的语义标签 header footer nav aside article section②&#xff1a;新的表单控件 calendar date time email url search③&#xff1a;音频、视频&#xff08; aud…

地产2022价值启示录:房企必须闯过的“三重门”

回顾2022年&#xff0c;中国最大的经济变向之一&#xff0c;无疑就是地产增量时代的落幕。过去一整年&#xff0c;地产行业在“冷热交替”中前行。上半年&#xff0c;疫情、交付延期、停贷潮等阴霾萦绕在众多房企头顶上&#xff0c;市场需求疲软之下业绩下滑&#xff0c;难以看…