15.三数之和 python

三数之和——python 问题描述 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 暴力求解时间复杂度为O(n3)无法通过测试 感谢吴彦祖的题解:原来还可以这样 排序加双指针法 首先将列表有序化方便排除重复解和确定三个元素的相对位置 i为最小的数,l为中间数,r为最大数... 阅读详情

题目

题目描述

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

题目链接

三数之和

题解

要解决这个问题,可以使用双指针法来查找所有和为零的三元组。具体步骤如下:

  1. 排序数组:首先对数组进行排序,这样可以方便地使用双指针法。
  2. 固定一个数:遍历数组,固定一个数 nums[i]。
  3. 使用双指针:对于固定的 nums[i],使用两个指针 left 和 right 分别指向 i+1 和数组的末尾,寻找满足 nums[i] + nums[left] + nums[right] == 0 的组合。
  4. 去重:在遍历过程中,跳过重复的元素,避免产生重复的三元组。

Python 实现

def threeSum(nums):
    nums.sort()  # 对数组进行排序
    result = []
    n = len(nums)
    
    for i in range(n):
        # 如果当前数字大于0,则三数之和不可能为0,直接返回结果
        if nums[i] > 0:
            break
        # 跳过重复的元素
        if i > 0 and nums[i] == nums[i - 1]:
            continue
        
        left, right = i + 1, n - 1
        while left < right:
            total = nums[i] + nums[left] + nums[right]
            if total < 0:
                left += 1  # 如果总和小于0,移动左指针
            elif total > 0:
                right -= 1  # 如果总和大于0,移动右指针
            else:
                result.append([nums[i], nums[left], nums[right]])
                # 跳过重复的元素
                while left < right and nums[left] == nums[left + 1]:
                    left += 1
                while left < right and nums[right] == nums[right - 1]:
                    right -= 1
                left += 1
                right -= 1
    
    return result

解释

  1. 排序数组:

    • nums.sort() 对数组进行排序,使得后续的双指针操作更加方便。
  2. 固定一个数:

    • 使用 for 循环遍历数组,固定一个数 nums[i]。
    • 如果 nums[i] 大于0,因为数组已经排序,所以后续的数都会大于0,不可能找到和为0的三元组,直接返回结果。
    • 跳过重复的元素,避免产生重复的三元组。
  3. 使用双指针:

    • 初始化两个指针 left 和 right,分别指向 i+1 和数组的末尾。
    • 计算当前三数之和 total。
    • 如果 total 小于0,移动左指针 left。
    • 如果 total 大于0,移动右指针 right。
    • 如果 total 等于0,将当前三元组加入结果列表,并跳过重复的元素,避免产生重复的三元组。
  4. 返回结果:

    • 返回结果列表 result,包含所有和为0且不重复的三元组。

通过这种方法,可以在 O(n^2) 的时间复杂度内解决问题,效率较高。

提交结果

在这里插入图片描述

【Unity报错】Unity导入海康SDK 报错 DllNotFoundException: PlayCtrl assembly 2.尝试按网上其他的办法(包括使用depengs查看dll依赖等)1.先检查Plugins文件夹中是否存在PlayCtrl文件。3.如果网上查阅的办法都不能解决,请继续往下看。更换低版本的SDK库文件。 阅读详情

相关推荐

ROS2+MoveIt2+Gazebo仿真实战:从零搭建六轴机械臂控制闭环

本文详细介绍了如何从零搭建一个完整的ROS2+MoveIt2+Gazebo六轴机械臂仿真控制闭环。通过手写URDF模型、配置MoveIt2运动规划、集成Gazebo物理仿真与ROS2 Control控制器,最终实现RViz中规划轨迹、Gazebo中同步执行的完整数字孪生验证平台,为机器人算法开发和硬件验证提供低成本、高效的仿真解决方案。

weixin_29093017的博客 486

【力扣算法14】之 15. 三数之和 python

本文介绍了力扣上一道经典的三数之和问题的解法。给定一个整数数组,要求找出所有不重复的三元组,使得三个数的和为0。首先对数组进行排序,然后使用双指针法遍历数组,以每个元素作为基准,在剩余的数组中使用左右指针来寻找满足条件的三元组。如果找到满足条件的三元组,则将其加入结果列表。为了避免重复计算,需要进行一些额外的判断和操作。最后返回结果列表

全栈若城,专注知识分享 1788

NXP(imx8qxp)系列DDR校准以及android镜像烧录

文章目录一、 不得不吐槽以下nxp的这个代码镜像烧写的过程,做得太开源了,导致镜像根本烧录不进去,实属令人头痛。 一、

永不秃头的程序员的博客 5991

三数之和

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

Allen . Liu 832

国产大模型高考横评:数学推理与教育落地能力实测

大模型能力评估正从开放榜单转向封闭任务的确定性验证,高考作为强逻辑、低容错、高精度的标准化考试,成为检验模型真实推理能力的理想标尺。其核心在于考察知识覆盖、步骤完整性、单位敏感性与教学对齐度,而非单纯答案正确率。数学解答题尤其凸显模型在前提校验、条件枚举与过程可控性上的差异,反映出训练数据与教育语料深度耦合带来的工程化优势。该范式已延伸至语文语感建模、英语表达习惯适配及理综跨学科缝合等场景,为智能阅卷、精准答疑和教培系统集成提供可复现、可解释、可部署的技术依据。

weixin_30436581的博客 288

STM32版CCD线性摄像头寻线寻迹小车_stm32接ccd

目前大多数的小车寻线寻迹都是用红外对管寻线,这是比较简单也比较成熟的技术方案,且成本也低。本文将介绍使用CCD线性摄像头寻线寻迹。TSL1401 线性传感器由一个 1x128 的光电二极管阵列、相关的电荷放大电路以及一个内部像素数据保功能组成。内部像素数据保功能可以为所有像素点提供同时积分的开始和停止时间。该阵列由 128 个像素组成,每个像素的感光面积为 3,524.3 平方微米。像素之间的间隔为 8μm。内部控制逻辑简化了操作,该模块需要串行输入(SI)信号和时钟信号(CLK)。

2401_87557129的博客 3229

Python三数之和

三数之和题目描述: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c , 使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 答案中不允许包含重复的三元组。 示例: 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ] 思路: 1. 首先将数组排序,可以利用Python内置函数,也可以利用另外定义排序算法。 2. 应用双指

weixin_43937698的博客 7855

Anaconda镜像源切换全攻略:从清华源到恢复默认设置的完整流程

本文详细介绍了Anaconda镜像源的管理与优化,重点讲解了如何配置清华源以提升国内下载速度。内容涵盖镜像源工作原理、清华源详细配置步骤、多源管理策略、常见问题排查以及如何安全恢复默认设置,帮助用户构建完整的镜像源管理体系。

weixin_28828243的博客 1021

python-三数之和

三数之和,给定一个包含n个整数的数组nums,判断nums中存在三个元素,abc ,之和为0,答案中不可以包含重复的三元祖。

qq_49170882的博客 986

基于Simulink的光储系统黑启动能力仿真

本文基于Simulink平台构建了光储系统黑启动仿真模型,详细阐述了储能VF控制、光伏孤岛MPPT和同步并网等核心控制策略。通过分阶段协调控制(储能启动→关键负载→光伏接入→非关键负载→同步并网),实现了60秒内恢复供电、母线电压波动<5%的性能指标。仿真结果表明,协调控制策略相比无序启动可显著提升系统稳定性,避免电压崩溃和负载跳闸。文章还提供了完整的建模步骤、核心代码及进阶优化方向,为微电网应急供电设计提供了实用参考。该模型适用于光伏储能系统的黑启动能力验证和优化研究。

amy_mhd的博客 106

STM32入门教程:车牌识别

在本文中,我们介绍了如何使用STM32实现车牌识别功能,并提供了详细的代码案例。通过以上步骤,你可以开始开发自己的车牌识别系统了。希望本文对你有所帮助!

2401_85258012的博客 874

LeetCode-15 三数之和(python)

题目链接:三数之和 分析:写过“两数之和”可以稍作思考,找到a,b,c满足a+b+c=0,就是找到a,b满足a+b=-c,这就是两数之和了,再防止重复的结果。 这里给出相对通用的方案:先对数组进行排序,再前后夹逼求解,时间复杂度O(n^2) 不单单是三数之和,k数之和也可以这样推广,O(max { n*logn, n^(k-1) } ) 直接看代码,在注释里解释,所得结果在数组中的下...

漂漂飘的博客 350

【红绿灯识别】基于计算机视觉实现道路信号灯检测识别系统附Matlab代码

随着自动驾驶技术的快速发展,对道路交通信号灯的检测识别技术也提出了更高的要求。本文提出了一种基于计算机视觉的道路信号灯检测识别系统,该系统能够准确地检测和识别道路交通信号灯,并输出信号灯的颜色信息。该系统采用深度学习方法,利用卷积神经网络(CNN)对道路交通信号灯进行检测和识别。实验结果表明,该系统能够在复杂的环境中准确地检测和识别道路交通信号灯,具有较高的实用价值。道路交通信号灯是道路交通管理的重要组成部分,它能够有效地组织交通,提高道路通行效率,保障交通安全。

qq_59747472的博客 341

Python描述 LeetCode15. 三数之和

给你一个包含 个整数的数组 ,判断 中是否存在三个元素 *a,b,c ,*使得 a + b + c = 0 ?请你找出所有和为 且不重复的三元组。**注意:**答案中不可以包含重复的三元组。示例 1: 示例 2: 示例 3: 提示:遍历两个数,剩下一个数使用字典进行验证。...

一起加油 646

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【PY】Leetcode-15 三数之和 python代码+解析

给定一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= j、i!= k 且 j!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。请你返回所有和为 0 且不重复的三元组。给定一个整数数组,数组长度在3~3000之间,并且数组中每个数的值在-10^5到10^5之间。需要在个数组中找出可能的多个三元组,使三元组中的数字之和为0,并最后返回所有三元组组成的列表。

2301_80168425的博客 354

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LeetCode 15 三数之和 3Sum Python

有关哈希表的LeetCode做题笔记,Python实现 15. 三数之和 3Sum LeetCodeCN 第15题链接 第一种方法:三重遍历,时间复杂度为O(n^3) 第二种方法:两重遍历得到前两个数,然后查询第三个数-(a+b)是否存在。用哈希表set() class Solution(object): def threeSum(self, nums): """ ...

fongim的博客 260

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

力扣第15题 三数之和 python

思路: 这个题有点难,如果暴力算法一定超时,然后采用了双指针,但是考虑方面有点多,要先排序,再排除一些不可能的情况,再讨论去重(分别在k,j,i)再进行定k,同时i和j进行双指针算法,i进行i++,j进行j– 组织以后:先顺序排序,再从头到尾,循环取一个值(k),作为三数之一。 循环内,另外两个数(i和j),分别从左边最近的(i),以及最后的(j)开始取值,求和。 和为0,则加入结果数组,同时两数...

lvjiwei001的博客 540

LeetCode题解(python)-15. 三数之和

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

Marshal Zheng的博客 468

leedcode15 - 三数之和 python

leedcode15 - 三数之和 python 题目描述: 题解思路: 代码实现:`` class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: # 这道题目难点就在于如何去掉重复解 # 求出整个数组长度 n = len(nums) # 初始化一个数组来存储结果 res = [] # 来进行判断特殊情况

毕业才是起点 344

【python3&&Java】leetcode.15三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= j、i!= k 且 j!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。

embrace_zero的博客 162

Python3:LeetCode第15题 三数之和

Whystarta_z的博客 425

DeepSeek LeetCode 15.三数之和 Python3实现

2. 固定一个数 nums[i],然后用双指针 left 和 right 在剩余区间中寻找两个数,使三数之和为 0。# 跳过重复的 nums[right]# 排序后如果当前数大于 0,后面不可能凑出和为 0。# 跳过重复的 nums[left]# 跳过重复的 nums[i],避免重复三元组。· 和等于 0:记录结果,并跳过重复的 left 和 right。4. 固定数 nums[i] 也要跳过重复值,避免重复三元组。空间复杂度: O(1)(不考虑返回结果和排序栈空间)· 和大于 0:right 左移。

m0_37843156的博客 70

leetcode 15.三数之和(python)

leetcode 15.三数之和(python) 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 *a,b,c ,*使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 **注意:**答案中不可以包含重复的三元组。 示例: 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ] a + b = -c 方法1: 暴力求解, 三重循环 0(n^3) #

pureszgd的博客 337

15. 三数之和_python

【题目】 【思路】 两次for循环,查找第三个数thrid = -nums[i] - nums[j] ,判断剩下的数组中是否存在第三个数。 【python】 class Solution(object): def threeSum(self, nums): &amp;quot;&amp;quot;&amp;quot; :type nums: List[int] :rtype: List[Li...

weixin_43399785的博客 473

【Python实战】LeetCode15:三数之和

题目描述 暴力法(超时) 看到题目的第一想法,是最容易想到的暴力搜索法 class Solution(object): def threeSum(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ result = [] ...

Mr_SCX的博客 522

LeetCode 15. 三数之和|Python 解法详解

本文详解了LeetCode 15题"三数之和"的Python解法。该题要求找出数组中所有和为0且不重复的三元组。解题核心是先对数组排序,然后枚举第一个数,在其右侧使用双指针寻找另外两个数。时间复杂度O(n²),空间复杂度O(1)。关键点是排序后利用单调性移动指针,并在三处位置进行去重处理。当固定数大于0时可提前终止循环,优化效率。实现时需注意处理重复元素和边界条件,确保算法正确性和健壮性。

a1250467048的博客 186
上一篇: 14.最长公共前缀 python
下一篇: 16.最接近的三数之和 python
gxls2024
博客等级 码龄9年 1079粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gxls2024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值