美文网首页
LeeCode 3Sum

LeeCode 3Sum

作者: manyGrasses | 来源:发表于2019-02-01 15:55 被阅读0次

题目

Given an array nums of n integers, are there elements a, b, c in nums 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.

Example:
Given array nums = [-1, 0, 1, 2, -1, -4],
A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]
]


暴力解法

三个循环。。结果超时,此路不通。

代码示例

class Solution:
    def threeSum(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        
        triplets = []
        for i in range(len(nums)-2):
            for j in range(i+1, len(nums) - 1):
                for k in range(j+1 , len(nums)):
                    if nums[i] + nums[j] + nums[k] == 0:
                        tmp = [nums[i], nums[j], nums[k]]
                        if set(tmp) not in list(map(set, triplets)):
                            triplets.append(tmp)
        return triplets


优化解法

需要先对数据进行排序,从左、中、右三个部分进行寻找。

class Solution:
    def threeSum(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        res = []
        nums.sort()
        for i in range(len(nums)-2):
            if i > 0 and nums[i] == nums[i-1]:
                continue
            l, r = i+1, len(nums)-1
            while l < r:
                s = nums[i] + nums[l] + nums[r]
                if s < 0:
                    l +=1 
                elif s > 0:
                    r -= 1
                else:
                    res.append((nums[i], nums[l], nums[r]))
                    while l < r and nums[l] == nums[l+1]:
                        l += 1
                    while l < r and nums[r] == nums[r-1]:
                        r -= 1
                    l += 1; r -= 1
        return res                    

相关文章

网友评论

      本文标题:LeeCode 3Sum

      本文链接:https://www.haomeiwen.com/subject/qphlsqtx.html