Leetcode15 三个数之和
作者:互联网
本题暴力法解决肯定超时。。
参考大神的正确做法,时间复杂度是O(n^2), 空间复杂度是O(1).
做法仍然是双指针的思路,这个双指针并不是从头开始,由于是三个数,所以先固定一个数,然后在这个数剩余部分做双指针遍历。
所以首先自然想到要进行排序。。然后在排序后遍历过程中可以提前停止,停止条件是遍历到大于0的元素。
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
n=len(nums)
res=[]
if(not nums or n<3):
return []
nums.sort()
res=[]
for i in range(n):
if(nums[i]>0):
return res
if(i>0 and nums[i]==nums[i-1]):
continue
L=i+1
R=n-1
while(L<R):
if(nums[i]+nums[L]+nums[R]==0):
res.append([nums[i],nums[L],nums[R]])
while(L<R and nums[L]==nums[L+1]):
L=L+1
while(L<R and nums[R]==nums[R-1]):
R=R-1
L=L+1
R=R-1
elif(nums[i]+nums[L]+nums[R]>0):
R=R-1
else:
L=L+1
return res
作者:zhu_shi_fu
链接:https://leetcode-cn.com/problems/3sum/solution/pai-xu-shuang-zhi-zhen-zhu-xing-jie-shi-python3-by/
来源:力扣(LeetCode)
qq_20880939 发布了96 篇原创文章 · 获赞 22 · 访问量 4万+ 私信 关注
标签:遍历,return,nums,res,List,三个,Leetcode15,指针 来源: https://blog.csdn.net/qq_20880939/article/details/104072425