前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode: 15. 3Sum

leetcode: 15. 3Sum

作者头像
JNingWei
发布2018-09-28 14:12:11
2800
发布2018-09-28 14:12:11
举报

Problem

# Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? 
# Find all unique triplets in the array which gives the sum of zero.
#
# Note: The solution set must not contain duplicate triplets.
#
# For example, given array S = [-1, 0, 1, 2, -1, -4],
#
# A solution set is:
# [
#   [-1, 0, 1],
#   [-1, -1, 2]
# ]

AC

正确,但会报 Time Limit Exceeded

class Solution():
    def threeSum(self, x):
        x.sort()
        res = []
        for left in range(len(x) - 2):
            mid, right = left + 1, len(x) - 1
            while mid < right:
                s = x[left] + x[mid] + x[right]
                if s == 0:
                    if [x[left], x[mid], x[right]] not in res:
                        res.append([x[left], x[mid], x[right]])
                    mid, right = mid + 1, right - 1
                elif s < 0:
                    mid += 1
                else:
                    right -= 1
        return res


if __name__ == '__main__':
    assert Solution().threeSum([-1, 0, 1, 2, -1, -4]) == [[-1, -1, 2], [-1, 0, 1]]
    assert Solution().threeSum([1 ,1, 1, -2]) == [[-2, 1, 1]]

完全正确:

class Solution():
     def threeSum(self, x):
        x.sort()
        res = []
        for left in range(len(x) - 2):
            if left == 0 or x[left] != x[left-1] and x[left] <= 0:
                mid, right = left + 1, len(x) - 1
                while mid < right:
                    s = x[left] + x[mid] + x[right]
                    if s == 0:
                        res.append([x[left], x[mid], x[right]])
                        mid, right = mid + 1, right - 1
                        while mid < right and x[mid] == x[mid - 1]:
                            mid += 1
                        while mid < right and x[right] == x[right + 1]:
                            right -= 1
                    elif s < 0:
                        mid += 1
                    else:
                        right -= 1
        return res


if __name__ == '__main__':
    assert Solution().threeSum([-1, 0, 1, 2, -1, -4]) == [[-1, -1, 2], [-1, 0, 1]]
    assert Solution().threeSum([1 ,1, 1, -2]) == [[-2, 1, 1]]
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年11月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Problem
  • AC
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档