概述
参考官方解析,解释了排序+双指针的解法。
代码参考排序 + 双指针,逐行解释
代码:
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nlen = len(nums)
res = []
if nlen < 3:
return res
nums.sort()
for pivot in range(nlen): # 固定第一个值, 向后遍历
if nums[pivot] > 0: # 如果最小的数都大于0,那么后面找出的三数和不可能为0(已排序)
return res
if pivot > 0 and nums[pivot] == nums[pivot - 1]: # 跳过重复的数值
continue
L = pivot + 1 # 双指针的左边界 第二个值成递增趋势
R = nlen - 1 # 双指针的右边界 第三个值成递减趋势
while L < R :
if nums[pivot] + nums[L] + nums[R] == 0:
res.append([nums[pivot], nums[L], nums[R]])
L += 1
R -= 1
while L < R and nums[L] == nums[L - 1]: # 跳过重复数值
L += 1
while L < R and nums[R] == nums[R + 1]:
R -= 1
elif nums[pivot] + nums[L] + nums[R] > 0: # 第三个值大了些
R -= 1
else: # 第二个值小了些
L += 1
return res
最后
以上就是负责苗条为你收集整理的15.三数之和的全部内容,希望文章能够帮你解决15.三数之和所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复