LeetCode-15、三数之和-中等
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
代码1:
class Solution:
def threeSum(self, nums):
nums = sorted(nums)
res = []
start = 0
length = len(nums)
if length < 3:
return res
while start < length-2:
end = length - 1
while start < end-1:
mid = -1 * (nums[start] + nums[end])
if mid in nums[start+1:end]:
sum3 = [nums[start], mid, nums[end]]
if sum3 not in res:
res.append(sum3)
end -= 1
start += 1
return res
超出时间限制
代码2:
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums.sort()
res =[]
for i in range(len(nums)):
if i == 0 or nums[i] > nums[i-1]:
l = i + 1
r = len(nums) - 1
while l < r:
s = nums[i] + nums[l] +nums[r]
if s == 0:
res.append([nums[i], nums[l], nums[r]])
l += 1
r -= 1
while l < r and nums[l] == nums[l-1]:
l += 1
while r > l and nums[r] == nums[r+1]:
r -= 1
elif s > 0:
r -= 1
else :
l += 1
return res

本文详细解析了LeetCode第15题“三数之和”的解决方案,介绍了如何寻找数组中满足特定条件的三个数,使其和为零,并避免重复的三元组。提供了两种Python实现方法,一种超时,另一种则通过排序和双指针技巧,有效解决了问题。
452

被折叠的 条评论
为什么被折叠?



