【python-leetcode15-双指针】三个数之和为零
发布时间:2020-12-20 09:55:18 所属栏目:Python 来源:网络整理
导读:问题描述: 给定一个包含 n 个整数的数组?nums,判断?nums?中是否存在三个元素 a,b,c ,使得?a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例: 给定数组 nums = [-1,1,2,-1,-4], 满足要求的三元组集合为
问题描述: 给定一个包含 n 个整数的数组?nums,判断?nums?中是否存在三个元素 a,b,c ,使得?a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例: 给定数组 nums = [-1,1,2,-1,-4], 满足要求的三元组集合为: 代码: 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 结果: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |