Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
For example, given array S = {-1 2 1 -4}, and target = 1. The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
Subscribe to see which companies asked this question
跟前一道题还是很像的。
下面的还是用变态方法做的
class Solution(object):
def threeSumClosest(self, nums, target):
nums.sort()
#print nums
res = 0
minn = 1 << 31
l = len(nums)
for i in xrange(l):
a = 0
b = l - 1 #en(nums) - 1
while a < i and b > i:
#print i,a,b,nums[a],nums[i],nums[b]
s = nums[a] + nums[b] + nums[i]
tmp = abs(s - target)
if minn > tmp:
minn = tmp
res = s
if s > target:
b -= 1
else:
a += 1
return res
'''
nums.sort()
#print nums
minn = 1 << 31
#print minn
res = 0
per = itertools.combinations(nums,3)
for i in per:
#print i
summ = sum(i)#i[0] + i[1] + i[2]
t = abs(summ - target)
if t < minn:
minn = t#abs(summ - target)
res = summ
#for i in xrange(len(nums)):
# print nums[i]
return res
'''
"""
:type nums: List[int]
:type target: int
:rtype: int
"""