Leedcode三数之和 Python解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Leedcode三数之和 Python解析

问题描述:


给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。


注意:答案中不可以包含重复的三元组


问题分析:1:不难想到转化成为两数之和的问题 -c=a+b


2:为了避免重复 先将原序列排序


例如 [-1,0,1,2,-1,-4]排序后[-4,-1,-1,0,1,2] 遍历数组每个元素 作为target(-c)


每次遍历就是求每一次新的target的两数之和问题


因而容易写出以下代码


class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        if len(nums)<3:
            return []
        else:
            answer=[]
            for i in range(0,len(nums)-1):
                target=nums[i]
                for j in range(i+1,len(nums)-1):
                    if -target-nums[j] in nums[j+1:]:
                        tmp=[target,min(-target-nums[j],nums[j]),max(-target-nums[j],nums[j])]
                        if  tmp not in answer:
                            answer+=[tmp]
        return answer


很遗憾 超时了 315/318


下面尝试利用双指针,进行优化分析:


image.png

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        if len(nums)<3:
            return []
        else:
            answer=[]
            for i in range(0,len(nums)-1):
                target=nums[i]
                if target>0:
                    break
                start,end=i+1,len(nums)-1
                while start<end:
                    if nums[start]+nums[end]+target==0:
                        tmp=[target,nums[start],nums[end]]
                        if tmp not in answer:
                            answer.append(tmp)
                        start+=1
                        end-=1
                    elif nums[start]+nums[end]+target>0:
                        end-=1
                    else:
                        start+=1
        return answer

image.png



我是小郑😀今天强化了双指针学习很高兴 期待与你一起进步


目录
相关文章
|
7月前
|
算法 索引 Python
Python3实现旋转数组的3种算法
Python3实现旋转数组的3种算法
61 0
|
7月前
|
存储 Python
Python中的for循环
Python中的for循环
|
7月前
|
存储 Python
Python for循环
Python for循环
57 0
|
7月前
|
Python
在Python中for循环
在Python中for循环
81 1
|
7月前
|
Python
python编写一个数组排序
python编写一个数组排序
64 8
|
7月前
|
Python
python中的for循环
python中的for循环
85 7
|
存储 算法 Python
Python递归算法详解
Python递归算法详解
|
7月前
|
Python
【python】二分查找
【python】二分查找
36 0
|
Python
13 python - for循环
13 python - for循环
39 0
|
数据库管理 Python
Python|对for循环的基本运用
Python|对for循环的基本运用
67 0