首页 > 其他 > 详细

015 3 SUM

时间:2015-07-08 07:09:03      阅读:228      评论:0      收藏:0      [点我收藏+]

这道题县排序 然后设定好第一位,后面两位夹逼搜索就好, 但是因为数字会出现重复,导致得出的3元祖也有可能重复,一开始我的办法是采用set来避免多次加入同样的三元组,运行时间为 344ms

class Solution:
    # @param {integer[]} nums
    # @return {integer[][]}
    def threeSum(self, nums):
        length = len(nums)
        if length <= 2:
            return []
        nums = sorted(nums)
        ans = set()
        for i in range(0, length - 2):
            j = i + 1
            k = length - 1
            while j < k:
                s = nums[i] + nums[j] + nums[k]
                if s == 0:
                    ans.add((nums[i], nums[j], nums[k]))
                    j += 1
                elif s < 0:
                    j += 1
                else:
                    k -= 1
        ret = []
        for a in ans:
            ret.append(list(a))
        return ret

看了下Python runtime distributtion 发现有一些python解法明显比我快, 因此优化了一下避免重复加入3元组的部分, 不使用set, 而是在夹逼时如果发现相邻两个数相等则不继续求和判断,结果运行时间 212ms 有了明显提高,代码如下

class Solution:
    # @param {integer[]} nums
    # @return {integer[][]}
    def threeSum(self, nums):
        length = len(nums)
        if length <= 2:
            return []
        nums = sorted(nums)
        ans = []
        i = 0
        while i < length - 2:
            j = i + 1
            k = length - 1
            while j < k:
                s = nums[i] + nums[j] + nums[k]
                if s == 0:
                    ans.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
                elif s < 0:
                    j += 1
                else:
                    k -= 1
            i += 1
            while i < length - 2 and nums[i] == nums[i-1]:
                i += 1
        return ans

 

015 3 SUM

原文:http://www.cnblogs.com/dapanshe/p/4629054.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!