news 2026/2/12 3:27:07

leetcode刷题-day6(三数之和)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
leetcode刷题-day6(三数之和)

java实现两数之和

  • 1、题目原题
  • 2、思路及算法(排序 + 双指针)
    • 2.1 排序 + 双指针
  • 3、代码实现:
    • 3.1 排序

1、题目原题

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

2、思路及算法(排序 + 双指针)

2.1 排序 + 双指针

每次以双指针为左右边界(也就是「数组」的左右边界)计算出的容量中的最大值

3、代码实现:

3.1 排序

class Solution{public List<List<Integer>>threeSum(int[]nums){int n=nums.length;Arrays.sort(nums);List<List<Integer>>ans=new ArrayList<List<Integer>>();// 枚举 afor(int first=0;first<n;++first){// 需要和上一次枚举的数不相同if(first>0&&nums[first]==nums[first -1]){continue;}// c 对应的指针初始指向数组的最右端 int third=n -1;int target=-nums[first];// 枚举 bfor(int second=first +1;second<n;++second){// 需要和上一次枚举的数不相同if(second>first +1&&nums[second]==nums[second -1]){continue;}// 需要保证 b 的指针在 c 的指针的左侧while(second<third&&nums[second]+ nums[third]>target){--third;}// 如果指针重合,随着 b 后续的增加 // 就不会有满足 a+b+c=0并且 b<c 的 c 了,可以退出循环if(second==third){break;}if(nums[second]+ nums[third]==target){List<Integer>list=new ArrayList<Integer>();list.add(nums[first]);list.add(nums[second]);list.add(nums[third]);ans.add(list);}}}returnans;}}

时间复杂度:O(N *N ),其中 N 是数组 nums 的长度。

空间复杂度:O(logN)。我们忽略存储答案的空间,额外的排序的空间复杂度为 O(logN)。然而我们修改了输入的数组 nums,在实际情况下不一定允许,因此也可以看成使用了一个额外的数组存储了 nums 的副本并进行排序,空间复杂度为 O(N)

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

C++的第十四天笔记

存储持续性、作用域和链接性C使用三种&#xff08;C11四种&#xff09;不同方案存储数据。这些方案的区别在于数据保留在内存中的时间。自动存储持续性&#xff1a;在函数定义中声明的变量&#xff08;包括函数参数&#xff09;&#xff0c;程序执行所属函数 / 代码块时创建&am…

作者头像 李华
网站建设 2026/2/3 10:44:47

874-LangChain框架Use-Cases - 基于智能体的动态槽位填充系统 - 案例分析

1. 案例目标 本案例旨在构建一个基于智能体的动态槽位填充系统&#xff0c;实现智能对话系统&#xff0c;能够分析用户请求并自动收集必要信息&#xff0c;通过对话补充缺失信息。 系统主要实现以下目标&#xff1a; 实现动态槽位填充功能&#xff0c;自动识别并收集必要信息…

作者头像 李华
网站建设 2026/2/5 3:01:14

ops-nn算子库生态纵览 - 构建健壮的AI算力基石

目录 &#x1f3af; 摘要 1. ops-nn&#xff1a;CANN神经网络计算的中枢神经系统 1.1 &#x1f504; 算子库的定位与演进轨迹 1.2 &#x1f4ca; 矩阵计算&#xff1a;AI算力的本质洞察 2. NPU硬件架构&#xff1a;算子设计的物理基础 2.1 &#x1f527; AI Core微架构深…

作者头像 李华
网站建设 2026/2/8 14:46:10

基于Java Spring Boot的相机租赁系统的设计与实现-毕业设计源码50424

目录 摘 要 Abstract 第一章 绪 论 1.1 研究背景及意义 1.2 国内外研究现状 1.3 论文组织结构 第二章 关键技术 2.1 Java语言 2.2 MySQL 2.3 SpringBoot框架 2.4 B/S结构概述 第三章 相机租赁系统 系统分析 3.1 系统可行性分析 3.1.1 技术可行性 3.1.2 经济可行…

作者头像 李华
网站建设 2026/2/6 23:06:33

VMware替代 | 解析ZStack Cloud替代VCF基础架构底座路径

从2025年12月1日开始&#xff0c;VMware已经停止在中国销售VMware vSphere Foundation&#xff08;VVF&#xff09;VMware vSphere Enterprise Plus&#xff08;VVEP&#xff09;。这意味着&#xff0c;依赖VMware虚拟化的用户只能转向更昂贵的VMware Cloud Foundation&#xf…

作者头像 李华
网站建设 2026/2/10 11:28:20

[Powershell 入门教程]第10天习题解析

第10天习题解析有没&#xff1f;没有。这里会记录平时我使用Powershell的一些心得&#xff0c;也欢迎大家留言&#xff0c;合适的我会合并到正文中。

作者头像 李华