您的位置:首页 > 其它

3Sum

2016-07-25 17:54 239 查看
leetcode第15题,这道题是2sum的升级版,要求求3个数的和为0,而且不止一组,我的基本思路是固定一个数字,将问题转化为2sum,如何求解2sum,方法就多了,比如可以使用双指针法,或者hashmap等等,使用双指针法的时候可能会出现一个小小的问题,那就是固定一个数字的时候,满足条件的另外两个数可能不止一组,所以我最后借鉴了别人的思路改用了字典搜索,两种代码我都附上,之后再看看能不能克服这个问题。

另:原方法在外层循环做了一个重复数据的判定,速度大大提升,这主要是基于数据了。

def threeSum(nums):

# 方法一
# import copy
# def twoSum(nums,target):
# n = len(nums)
# start = 0;end = n-1
# while start < end:
# if nums[start]+nums[end] < target:
# start += 1
# elif nums[start]+nums[end] > target:
# end -= 1
# else:
# return nums[start],nums[end]
# return None,None
#
#
# n = len(nums)
# sl = sorted(nums)
# print sl
# ans = set()
# for i in range(n):
# singleAns = []
# target = 0-sl[i]
# temp = copy.deepcopy(sl)
# del temp[i]
# num1,num2 = twoSum(temp,target)
# print num1,num2
# if num1 != None and num2 != None:
# singleAns.append(sl[i])
# singleAns.append(num1)
# singleAns.append(num2)
# s = sorted(singleAns)
# addItem = tuple(s)
# ans.add(addItem)
#
#
# return map(list,ans)

# 方法二
n = len(nums)
nums.sort()
ans = set()
for index,num in enumerate(nums):
d = {}
for otherNum in nums[index+1:]:
if otherNum not in d:
d[-num-otherNum] = 1
else:
ans.add((num,-num-otherNum,-otherNum))
return map(list,ans)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: