数据结构之三数之和

(leetcode刷题)

三数之和

  题目: 给定一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c,使得a+b+c=0。找出所有满足条件且不重复的三元组。答案中不可以包含重复的三元组。
  示例: 给定数组nums=[-1, 0, 1, 2, -1, -4],返回的之为[[-1, 0, 1],[-1, -1, 2]]

方法:双指针+排序

  • 最直接的想法就是先排序,再两层循环,结果时间太久。看了题解是排序跟双指针的解法。(敬仰下大神)。他的中心思想是确定一个数,另外两个数分别在这个数的右侧和数组最右侧寻找(排序后),大于0就将数组最右侧的指针向左移动,小于0就将这个数旁边的指针向右移动,直至寻找到或进入下一个循环。
    在这里插入图片描述
def threeSum(nums):
    lens = len(nums)
    zeroList = []
    if lens < 3:
        return zeroList
    nums.sort()
    for i in range(lens):
        if nums[i] > 0:
            return zeroList
        if nums[i] == nums[i - 1] and i>0:
            continue
        L = i + 1
        R = lens - 1
        while L < R:
            if nums[L] + nums[R] + nums[i] == 0:
                zeroList.append([nums[L], nums[R], nums[i]])
                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 zeroList

在这里插入图片描述

发布了60 篇原创文章 · 获赞 2 · 访问量 1482

猜你喜欢

转载自blog.csdn.net/qq_40160983/article/details/104641448