本文主要是介绍python求解符合条件的三数之和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0
?请你找出所有满足条件且不重复的三元组。
注意
:答案中不可以包含重复的三元组。
LeetCode原题地址:https://leetcode-cn.com/problems/3sum/
测试用例
- 示例
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
代码实现
- 双指针法
双指针法的核心思想就是利用左右指针的移动,来寻找满足条件的第三个数
class Solution:def threeSum(self, nums):nums_len = len(nums)nums = sorted(nums)res = []#i为第一个指针,从排序后的数组第一个元素开始for i in range(nums_len):#避免重复的组合if i == 0 or nums[i] != nums[i-1]:#j为第二个指针,从排序后的数组最后一个元素开始j = nums_len - 1#k为第三个指针,需要在i和j之间移动for k in range(i+1,nums_len):#避免重复的组合if k == i+1 or nums[k] != nums[k-1]:a,b,c = nums[i],nums[j],nums[k]#保证k在指针i和j之间移动#当三数之和大于0时,将j往移动while j > k and a+b+c > 0:j -= 1#更新移动指针的值b = nums[j]#第二个指针和第三个指针重叠时退出循环if j == k:breakif a+b+c == 0:res.append([a,b,c])return ressolution = Solution()
print(solution.threeSum([-1, 0, 1, 2, -1, -4]))
参考:
- LeetCode详细题解
这篇关于python求解符合条件的三数之和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!