三数之和 python_力扣第15题 三数之和 python

思路:

这个题有点难,如果暴力算法一定超时,然后采用了双指针,但是考虑方面有点多,要先排序,再排除一些不可能的情况,再讨论去重(分别在k,j,i)再进行定k,同时i和j进行双指针算法,i进行i++,j进行j–

组织以后:先顺序排序,再从头到尾,循环取一个值(k),作为三数之一。 循环内,另外两个数(i和j),分别从左边最近的(i),以及最后的(j)开始取值,求和。 和为0,则加入结果数组,同时两数向内分别移动,并判断去重。 和大于0,则后面的数前移,同样判断去重。 和小于0,则前面的数后移,同样判断去重。 最后,递增第一个数下标的同时,判断去重。

class Solution:

def threeSum(self, nums: List[int]) -> List[List[int]]:

nums.sort()

result,k=[],0

for k in range(len(nums)-2):

if nums[k]>0:

break

if k >0and nums[k] == nums[k-1]:

continue

i,j=k+1,len(nums)-1

while i

s=nums[k]+nums[i]+nums[j]

if s<0:

i+=1

while i

i+=1

elif s > 0:

j -=1

while i

j -= 1

else:

result.append([nums[k],nums[i],nums[j]])

i+=1

j-=1

while i < j and nums[i]==nums[i-1]:

i+=1

while i

j-=1

return result

?i=2020030411572971.PNG?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x2aml3ZWkwMDE=,size_16,color_FFFFFF,t_70

标签:判断,15,nums,int,三数,List,len,力扣,while

来源: https://blog.csdn.net/lvjiwei001/article/details/104650196

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值