https://leetcode-cn.com/problems/3sum/
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
先排序后再用三个指针处理,注意i和j向右移或k向左移的过程中,如果遇到相同的数要跳过:
class Solution:
def threeSum(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if len(nums) < 3:
return []
nums.sort()
i, res = 0, []
while i < len(nums)-2:
if nums[i] > 0:
break
j, k, nums_i = i+1, len(nums)-1, nums[i]
while j < k:
nums_j, nums_k = nums[j], nums[k]
nums_sum = nums_i + nums_j + nums_k
if nums_sum == 0:
res.append([nums_i, nums_j, nums_k])
if nums_sum <= 0:
j += 1
while nums[j] == nums_j and j < k-1:
j += 1
if nums_sum >= 0:
k -= 1
while nums[k] == nums_k and k > j+1:
k -= 1
i += 1
while nums[i] == nums_i and i < len(nums) - 2:
i += 1
return res