1. Two Sum; 15. 3Sum; 16. 3Sum Closest

1. Two Sum
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
res={}
for i in xrange(len(nums)):
if nums[i] in res:
return [res[nums[i]],i]
break
else:
res[target-nums[i]]=i

15. 3Sum

class Solution(object):
def threeSum(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
nums.sort()
res=[]
for i in xrange(len(nums)-2):
if i > 0 and nums[i] == nums[i-1]:
continue
l=i+1
r=len(nums)-1
while l<r:
s=nums[i]+nums[l]+nums[r]
if s<0:
l+=1
elif s>0:
r-=1
else:
res.append((nums[i],nums[l],nums[r]))
while l<r and nums[l]==nums[l+1]:
l+=1
while l<r and nums[r]==nums[r-1]:
r-=1
l+=1
r-=1

return res


16. 3Sum Closest
class Solution(object):
def threeSumClosest(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
nums.sort()
res=nums[0]+nums[1]+nums[2]
for i in range(len(nums)-2):
if i>0 and nums[i]==nums[i-1]:
continue
l=i+1
r=len(nums)-1
while l<r:
s=nums[i]+nums[l]+nums[r]
if s==target:
return s
elif abs(s-target)<abs(res-target):
res=s
elif s<target:
while l<r and nums[l]==nums[l+1]:
l+=1
l+=1
else:
while l<r and nums[r]==nums[r-1]:
r-=1
r-=1
return res

猜你喜欢

转载自www.cnblogs.com/ffeng0312/p/9721717.html