LeetCode : No15 3Sum

来源:互联网 发布:java多线程死锁 编辑:程序博客网 时间:2024/06/14 02:50

题目

https://leetcode.com/problems/3sum/:

 

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

 

三次循环:

Time Limit Exceeded

 

class Solution:    # @param {integer[]} nums    # @return {integer[][]}    def threeSum(self, nums):        RES = []        L = len(nums)        for i in range(L):            for j in range(i+1,L):                for k in range(j+1,L):                    if nums[i]+nums[j]+nums[k] == 0:                        temp = sorted([nums[i],nums[j],nums[k]])                        if temp not in RES:                            RES.append(temp)        return RES

 

方法二:

这种方法应该算是O(n^2)的复杂度,为何还是会Time Limit Exceeded

class Solution:    # @param {integer[]} nums    # @return {integer[][]}    def threeSum(self, nums):        sortNums = sorted(nums)        RES = []        for i in range(len(sortNums)):            tmp = self.twoSum(list(sortNums[0:i])+list(sortNums[i+1:]),0-sortNums[i])            if tmp:                if isinstance(tmp[0],list):                    for k in tmp:                        Restemp = sorted(k+[sortNums[i]])                        if Restemp not in RES:                            RES.append(Restemp)                else:                       Restemp = sorted(tmp+[sortNums[i]])                    if Restemp not in RES:                        RES.append(Restemp)        return RES    def twoSum(self, sortnums, Sum):        RES = []        i = 0        j = len(sortnums) - 1        while (i < j):            if sortnums[i] + sortnums[j] == Sum:                RES.append([sortnums[i],sortnums[j]])                i += 1                j -= 1            elif sortnums[i] + sortnums[j] > Sum:                j -= 1            else:                i += 1        return RES

方法三:其实和方法二一样的思路,这个更为明确,逻辑性更强=-=

耗时:201ms

class Solution:    # @param {integer[]} nums    # @return {integer[][]}    def threeSum(self, nums):        sortNums = sorted(nums)        RES = []        i = 0        while (i < len(sortNums)-2):            j = i+1            k = len(sortNums)-1            while (j<k):                Sum = sortNums[i] + sortNums[j] + sortNums[k]                if Sum == 0:                    RES.append([sortNums[i],sortNums[j],sortNums[k]])                    while (j<k) and sortNums[j] == sortNums[j+1]:                        j += 1                    j += 1                    while (j<k and sortNums[k] == sortNums[k-1]):                        k -= 1                    k -= 1                elif Sum < 0:                    j += 1                else:                    k -= 1            while i<len(sortNums)-2 and sortNums[i]==sortNums[i+1]:                i += 1            i += 1        return RES


 


 


 

 

0 0
原创粉丝点击