【python-leetcode15-双指针】三个数之和为零

【python-leetcode15-双指针】三个数之和为零,第1张

概述问题描述: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不

问题描述:

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。

示例:

给定数组 nums = [-1,1,2,-1,-4],

满足要求的三元组集合为:
[
[-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):                 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                    同理,右指针继续左移                    and nums[R] == nums[R - 1]):                        R = R - 1                    如果不相同直接左指针右移一位                    L = L + 1                    如果不相同直接右指针左移一位                    R = R - 1                elif (nums[i] + nums[L] + nums[R] >如果大于0,右指针左移一位                    R = R - 1                else:                    如果小于0,左指针右移一位                    L = L + 1        return res

结果:

总结

以上是内存溢出为你收集整理的【python-leetcode15-双指针】三个数之和为零全部内容,希望文章能够帮你解决【python-leetcode15-双指针】三个数之和为零所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1190071.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存