码迷,mamicode.com
首页 > 其他好文 > 详细

015 3 SUM

时间:2015-07-08 07:11:23      阅读:116      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!