leetcode分类总结:LeetCode-三数之和
leetcode分类总结:LeetCode-三数之和人生苦短 我用python 算法学习 点滴开始
题目说明给你一个包含 n 个整数的数组 nums,判断 nums 是否存在三个元素 a,b,c ,使得 a b c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
输入:nums = [-1 0 1 2 -1 -4]
输出:[[-1 -1 2] [-1 0 1]]
解题思路- 对给定的列表进行排序;
- 遍历列表,定义左右双指针,然后根据计算的结果进行左右指针的移动;
人生苦短 我用python 算法学习 点滴开始
from typing import List
class Solution:
def threeSum(self nums: List[int]) -> List[List[int]]:
# 列表先排序,然后双指针左右判断,左边i,i 1,右边n n-1进行双指针左右移动判断
if len(nums) < 3:
return []
result = []
nums.sort()
len_nums = len(nums)
for i in range(len_nums):
if nums[i] > 0:
return result
if i > 0 and nums[i] == nums[i-1]: # 二数相等跳过 否则重复判断
continue
else:
left = i 1 # 当前遍历数的下一个
right = len_nums - 1 # 最后一位
while left < right:
if nums[i] nums[left] nums[right] == 0:
result.append([nums[i] nums[left] nums[right]])
# left right进行下一位值的判断,如相等则移动
while left < right and nums[left] == nums[left 1]:
left = 1
while left < right and nums[right] == nums[right - 1]:
right -= 1
# 双指针左右移动
left = 1
right -= 1
elif nums[i] nums[left] nums[right] < 0:
left = 1
else:
right -= 1
return result
总结