力扣热题100_双指针_15_三数之和

文章目录

  • 题目链接
  • 解题思路
  • 解题代码


题目链接

给你一个整数数组 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 。

解题思路

1.nums数组长度变量记为n,同时将nums数组进行排序,ans设为数组存储答案;
2.将n进行for range循环(i从0开始,但不为n),
2(1).若i>0 且 i在nums数组所在索引的值与i-1在nums数组所在索引的值一致,跳过
2(2).left初始化为i+1,right初始化为n-1,若left < right,便一直循环下去
2(3)A.若left < right且left > i + 1 且 left在数组nums数组所在索引的值 与 left - 1在数组nums数组所在索引的值一致,则left += 1
2(3)B.若left < right且right > n - 1 且 right在数组nums数组所在索引的值 与 right + 1在数组nums数组所在索引的值一致,则right -= 1
2(4).i、left、及right在nums所在索引的值之和保存为s变量
2(5).若left < right且s == 0时,保存i、left、及right在nums所在索引的值入ans,并将left+=1,right-=1
2(6).若s > 0时,right-=1
2(7).若s < 0时,left+=1

解题代码

class Solution:def threeSum(self, nums: [int]) -> [[int]]:n = len(nums)nums.sort()ans = []for i in range(n):if i > 0 and nums[i] == nums[i - 1]: continueleft, right = i + 1, n - 1while left < right:while left < right and left > i + 1 and nums[left] == nums[left - 1]:left += 1while left < right and right < n - 1 and nums[right] == nums[right + 1]:right -= 1s = nums[i] + nums[left] + nums[right]if left < right and s == 0:ans.append([nums[i], nums[left], nums[right]])left += 1right -= 1elif s > 0:right -= 1else:left += 1return ans

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

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

相关文章

Node.js开发-path模块

path模块 path 模块提供了 操作路径 的功能&#xff0c;将介绍如下几个较为常用的几个 API&#xff1a; API说明path.resolve拼接规范的绝对路径 常用path.sep获取操作系统的路径分隔符path.parse解析路径并返回对象path.basename获取路径的基础名称path.dirname获取路径的目…

Docker 第十五章 : Docker 三剑客之 Compose(一)

第十五章 : Docker 三剑客之 Compose(一) 本章知识点: 介绍了Docker Compose是一个强大的工具,用于定义、管理和部署多个Docker容器化的应用程序,同时介绍了Docker Compose安装、卸载、以及如何使用Docker ComposeYAML模板文件来定义服务及其配置,使开发人员能够轻松地…

ChatGPT绘图指南:DALL.E3玩法大全(一)

一、 DALLE.3 模型介绍 1、什么是 DALLE.3 模型&#xff1f; DALLE-3模型&#xff0c;是一种由OpenAI研发的技术&#xff0c;它是一种先进的生成模型&#xff0c;可以将文字描述转化为清晰的图片。这种模型的名称"DALLE"实际上是"Deep Auto-regressive Latent …

让每次生成的随机数都相同np.random.seed()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 让每次生成的随机数都相同 np.random.seed() 选择题 关于以下代码输出的结果说法正确的是&#xff1f; import numpy as np np.random.seed(0) print(【执行】print(np.random.rand(3))) prin…

QT+OSG/osgEarth编译之九十一:osgdb_pnm+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5插件库osgdb_pnm)

文章目录 一、osgdb_pnm介绍二、文件分析三、pro文件四、编译实践一、osgdb_pnm介绍 osgDB_pnm是OpenSceneGraph(OSG)库中的一个插件,用于支持PNM图像格式的读取和写入。PNM(Portable Any Map)是一种简单的、无损的位图图像格式,用于存储灰度图像和彩色图像。 osgDB_pn…

SpringBoot后端Long数据传到前端js精度损失问题

文章目录 方案一、修改后端方案二、修改前端 方案一、修改后端 在对应的字段上添加注解&#xff0c;将Long转为String后传输。 JsonFormat(shape JsonFormat.Shape.STRING)private Long payNo;方案二、修改前端 在js对应的结果接收上使用BigInt。 xxx().then((res) > {i…

EXTI外部中断

&#xff1f; 难点&#xff1a;中断向量表、看门狗、NVIC的优先级位&#xff1f;EXTI框图&#xff1f; ------------------------ 中断系统 中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;--->例如&#xff1a;…

C++初阶(十二) stack和queue

一、stack的介绍和使用 1.1 stack的介绍 stack的文档介绍 stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行 元素的插入与提取操作。stack是作为容器适配器被实现的&#xff0c;容器适配器即是对特定类封装作…

python_django高校运动会成绩管理系统4o4c3

田径运动会报名管理系统就是给学生进行网上报名&#xff0c;管理员管理报名信息的一种通用管理平台&#xff0c;从而方便管理人员对运动会的日常报名工作的管理。本系统的前台功能模块包括系统的基本操作、最新公告、运动项目和报名项目&#xff1b;系统的后台功能模块包括系统…

【NCCL】入门(一):介绍和简单demo

介绍 NCCL&#xff08;NVIDIA Collective Communications Library&#xff09;是由NVIDIA开发的一种用于高性能GPU集群的通信库。它旨在提供高效的GPU间通信和协作能力&#xff0c;以加速分布式深度学习和其他GPU密集型计算任务。 NCCL支持在多个GPU之间进行并行计算和通信。…

Ubuntu忘记登录密码重置步骤

Ubuntu忘记登录密码重置步骤 1.开机界面长按shitf键&#xff0c;进入grub&#xff0c;并选择Advanced options for ubuntu&#xff0c;按下回车 2.选择一个较新版本的recovery mode&#xff0c;按下回车 3.会跑一些数据&#xff0c;等待跑完后会出现下面的界面&#xff0c;选择…

百家号蓝V认证多少钱?开通蓝V认证的价值

随着互联网的发展&#xff0c;目前已经进入了一个自媒体的时代。百家号就是百度为创作者打造的集创作、发布、实现于一体的内容创作平台&#xff0c;也是内容运营获取低成本流量实现的官方自媒体账号。蓝V认证是平台对百家号的一个认证&#xff0c;通过认证之后头像有蓝V标识&a…

算法训练营day29, 贪心算法3

import ( "sort" ) // 1005. K 次取反后最大化的数组和 func largestSumAfterKNegations(nums []int, k int) int { //先从小到大排序 sort.Ints(nums) sum : 0 //将数组中负数转为正数 for i : 0; i < len(nums); i { if nums[i] < 0 && k > 0 …

【STM32 CubeMX】I2C查询方式

文章目录 前言一、CubeMX配置IIC二、查询方式的使用2.1 分析一种情况2.2 Master模式2.3 Mem模式 总结 前言 在STM32 CubeMX环境中&#xff0c;I2C&#xff08;Inter-Integrated Circuit&#xff09;通信协议的查询方式是一种简单而常见的通信方式。通过查询方式&#xff0c;微…

Windows 命令提示符(CMD)操作(一):文件和目录管理

一、文件和目录管理 1.1 dir 列出目录中的文件和子目录 一般语法&#xff1a; dir [drive:][path][filename] [/p] [/w] [/s] [/b] [/a[[:]attributes]] [/o[[:]sortorder]] [/t[[:]timefield]] [/c] [/l] [/q] [/r] [/d] [/4]其中&#xff1a; [drive:] 是可选的驱动器名…

JavaScript中数组和字符串有哪些原生方法

JavaScript是一门广泛应用于Web前端开发的高级编程语言&#xff0c;它具有丰富的内置方法和函数&#xff0c;方便我们对数据进行处理和操作。在JavaScript中&#xff0c;数组和字符串是两个常用的数据类型&#xff0c;它们都有许多原生方法可以使用。本文将向您介绍JavaScript中…

中小学信息学奥赛CSP-J认证 CCF非专业级别软件能力认证-入门组初赛模拟题第三套(选择题)

CSP-J入门组初赛模拟练习题第三套 1、以下不是属于国家顶级域名的是 A、.au B、.cn C、.com D、.jp 答案&#xff1a;C 考点分析&#xff1a;主要考查域名相关知识&#xff0c;au是澳大利亚、cn是中国&#xff0c;jp是日本&#xff0c;答案C 2、2个10进制数1111和1010的异…

第18讲 投票帖子管理实现

后端&#xff1a; /*** 删除指定id的投票信息* param id* return*/ GetMapping("/delete/{id}") Transactional public R delete(PathVariable(value "id")Integer id){voteDetailService.remove(new QueryWrapper<VoteDetail>().eq("vote_id…

图像卷积、步长、填充、特征图、多通道卷积、权重共享、感受野、池化

图像卷积、步长、填充、特征图、多通道卷积、权重共享、感受野、池化 卷积神经网络的一些基本概念&#xff1a;图像卷积、步长、填充、特征图、多通道卷积、权重共享、感受野、池化 1.图像卷积、步长、填充 图像卷积&#xff1a;卷积核矩阵在一个原始图像矩阵上 “从上往下、…

2024-02-16 AIGC-数字人-品达集团

数字人平台-品达集团 一. 公司介绍 数智员工-品达集团 二. 数字人-嗨团数字人 数智员工-品达集团 (pindajituan.com) 三. 短视频营销工具-牛视3.0 https://u.shkt.online/vod/PClive/?file_id3270835014637239307&signec855ead01&type1&app_id1500024016#/live牛…