知识点:主要考察的是哈希表的运用。大概思路就是,固定a,c两个数字,那么b就等于-a-c,通过建立一个哈希表,记性查找,这样的就可以从暴力算法的n立方的复杂度,到n平方的复杂度。
class Solution(object):
def threeSum(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if len(nums)<3:
return []
nums.sort()
res = set()
#到-2的原因是,v为第一个数字,后面还需要找到两个数字
for i, v in enumerate(nums[:-2]):
#题目要求的是找到不重复的三元组,假设第一个字母是v,那么v一样的组合我们不能再要了。
if i >= 1 and v == nums[i-1]:
continue
d = {}
#循环x,也就是题目中的c,然后算出b的值,b的值等于=-(a+c)也就是代码中的(-v-x),当循环到字典中有这个值的时候,代表我们找到了这样的一个b。
for x in nums[i+1:]:
if x not in d:
d[-v-x] = 1
else:
res.add((v, -v-x, x))
return map(list, res)