快捷搜索:  汽车  科技

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]]

解题思路
  1. 对给定的列表进行排序;
  2. 遍历列表,定义左右双指针,然后根据计算的结果进行左右指针的移动;
代码如下

人生苦短 我用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总结

leetcode分类总结:LeetCode-三数之和(1)

猜您喜欢: