#题目
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]]
满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。
请你返回所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
#思路
通过排序+双指针完成解题
#敲代码思维过程
对排序后的列表循环遍历,每一次循环都锁定了一个值,首先对索引值进行判断(第一次检查重复值),设置随循环可变的索引,接下来进入双指针法,分三种情况讨论,首先如果三个和为0,顺势判断下一个是否重复(第二次检查重复值),跳过重复的,无误的话,其次大于0,小于0分别移动,得出结果
#代码
class Solution:
def threeSum(self, nums: list[int]) -> list[list[int]]:
n = len(nums)
if (not nums or n < 3):
return []
nums.sort()
res = []
for i in range(n):
if (nums[i] > 0):
return res
if (i > 0 and nums[i] == nums[i - 1]):
continue
L = i + 1
R = n - 1
while (L < R):
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):
R = R - 1
else:
L = L + 1
return res
a = Solution()
print(a.threeSum([-6, 2, 3, 3, 3, 3, 4]))
#结果
[[-6, 2, 4], [-6, 3, 3]]
标签:力扣,15,nums,重复,res,三元组,蓝桥,while,return From: https://blog.csdn.net/2201_75478206/article/details/144174906