概述
分析
首先排个序
然后一个个固定,先固定first,然后注意相同的下一个直接跳过就去重
然后考虑second 和 third 他们的和target已经固定了
然后让third从n - 1开始
second从first + 1开始逐个上升,注意也要考虑去重
如果second 和 third 的和大于target就要third左移
知道两者相等或小于
然后记录等于target的数字
Ac code
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
n = len(nums)
nums.sort()
ans = []
# 一个个固定
for first in range(n - 2):
if first > 0 and nums[first] == nums[first - 1]:
continue
target = -nums[first]
# second third 双指针
third = n - 1
for second in range(first + 1, n):
if second > first + 1 and nums[second] == nums[second - 1]:
continue
while second < third and nums[second] + nums[third] > target:
third -= 1
if second == third:
break
if nums[second] + nums[third] == target:
ans.append([nums[first], nums[second], nums[third]])
return ans
总结
双指针典中典
最后
以上就是故意翅膀为你收集整理的leetcode:15. 三数之和【经典磨人题 + 固定法 + 双指针 + 去重】的全部内容,希望文章能够帮你解决leetcode:15. 三数之和【经典磨人题 + 固定法 + 双指针 + 去重】所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复