我是靠谱客的博主 仁爱宝马,最近开发中收集的这篇文章主要介绍LeetCode:15.三数之和思路,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

给定一个列表,找到列表中所有三个数字的组合使和为0。

思路

双指针思想

  • 先把列表排序(sort),依次选三个点
  • 先选最左边的(最小的点),设下标为i
  • 如果nums[i]大于0,则后面不会再有符合要求的组合。
  • 如果nums[i] 在i>0的情况下,num[i]等于上一个值,那当前的值就没有寻找的必要了,continue
  • 设置两个指针j,k,第一个指针k指向i+1,第二个指针指向倒数第一个值。
  • 计算三个值的和,如果大于0,则k减一,判断k-1的值和上一个num【k】是否相等,如果相等,也没有必要再判断了,继续减yi,(while实现)。如果小于0,则j+1,做类似的判断。
  • 如果等于0,则加入到res中,然后j+1,K-1,还是需要判断是否等于之前的值。
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums.sort()
res,i = [],0
for i in range(len(nums)-2):
if(nums[i]>0): break
if(i>0 and nums[i] == nums[i-1]) :continue
j,k = i+1,len(nums)-1
while j<k:
s = nums[i]+nums[j]+nums[k]
if s<0:
j +=1
while(j<k and nums[j] == nums[j-1]): j +=1
elif s>0:
k -=1
while(j<k and nums[k] ==nums[k+1]): k -=1
else :
print(s)
res.append([nums[i],nums[j],nums[k]])
j +=1
k -=1
while(j<k and nums[j]==nums[j-1]): j+=1
while(j<k and nums[k]==nums[k+1]) : k -=1
return res

最后

以上就是仁爱宝马为你收集整理的LeetCode:15.三数之和思路的全部内容,希望文章能够帮你解决LeetCode:15.三数之和思路所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部