【python-leetcode15-双指针】三个数之和为零
时间:2022-07-23
本文章向大家介绍【python-leetcode15-双指针】三个数之和为零,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
问题描述:
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]
代码:
class Solution:
def threeSum(self, nums):
#数组长度
n = len(nums)
if (not nums or n < 3):
return []
#先将数组进行排序
nums.sort()
#保存结果
res = []
#从左开始遍历数组
for i in range(n):
#当遍历到正数时就可以返回结果了
if (nums[i] > 0):
return res
#如果i>0且相邻两个值相等,则继续
if (i > 0 and nums[i] == nums[i - 1]):
continue
#左指针指向i的下一位
L = i + 1
#右指针指向数组右端
R = n - 1
#循环条件
#核心就是在第i位时,考虑从i+1位到末尾,不断通过增加左指针指向的值大小
#和减少右指针指向的值的大小来找到一个平衡位置使三者之和为0
while (L < R):
#如果这三个数加起来为0
if (nums[i] + nums[L] + nums[R] == 0):
#加入结果
res.append([nums[i], nums[L], nums[R]])
#此时对左指针的下一位进行判断,如果和其相同,左指针继续右移
while (L < R and nums[L] == nums[L + 1]):
L = L + 1
#同理,右指针继续左移
while (L < R and nums[R] == nums[R - 1]):
R = R - 1
#如果不相同直接左指针右移一位
L = L + 1
#如果不相同直接右指针左移一位
R = R - 1
elif (nums[i] + nums[L] + nums[R] > 0):
#如果大于0,右指针左移一位
R = R - 1
else:
#如果小于0,左指针右移一位
L = L + 1
return res
结果:
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- FatFs-目录下文件扫描
- Python之Bilibili自动更新邮件提醒并任务栏图标「完整代码」
- STC15频率产生器(粗调+微调+数码管显示)完整代码
- PID算法原理、调整规律及代码
- GIT——分布式版本控制系统
- 如何在 PHP 中使用和管理 Cookie
- 玩转 PhpStorm 系列(九):代码调试篇(上)
- 在 PHP 中使用和管理 Session
- STC51单片机中断与定时器配置参考
- 玩转 PhpStorm 系列(十):代码调试篇(下)
- STM32字符串转整数
- Java常用设计模式--代理模式(Proxy Pattern)
- 详解爬取搜狐号自媒体的所有文章
- 笑了,面试官问我知不知道异步编程的Future。
- ES6之let和const命令