您的位置:首页 > 编程语言 > Python开发

【leetcode】3SUM python实现

2016-06-03 13:08 375 查看
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:

Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)

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)


暴力法应该是O(N3),的时间复杂度,初步估计最少也需要O(N2)的时间复杂度,所以先排序(O(Nlog(N))),从小到大,然后到正数的时候停下。

参考之前的twoSum,相当于是遍历一遍,然后对每个遍历的Si,以−Si为target,往后找twoSum.

代码如下:

class Solution(object):
def threeSum(self, nums):
nums = sorted(nums)
res = []
if len(nums)<3:
return []
for y in xrange(len(nums)):
if nums[y]>0:
break
if y > 0 and nums[y] == nums[y-1]:
continue
res = self.twoSum(nums,-nums[y], y, res)
return res

def twoSum(self, nums, target, y, res):
dict={}
for i in xrange(len(nums)):
if y >=i:
continue
x=nums[i]
if target-x in dict:
mlist = sorted([target-x, x, nums[y]])
if mlist in res:
continue
res.append(mlist)
continue
dict[x]=i
return res
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode