PRoblem:
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).思路: 這道題與前一道15題3Sum是相似的,直接用3Sum里提到的那兩種方法之一皆可。唯一不同的是還需要一個統計參數sum來記錄最接近target值的三個數和,然后每一次循環需要比較當前三個數的和tmpsum與統計參數sum到target的絕對值,借此更新統計參數sum。
Solution:
class Solution(object): def threeSumClosest(self, nums, target): """ :type nums: List[int] :type target: int :rtype: int """ ressum = 0 delta = 0 nums.sort() numslen = len(nums) if numslen < 3: return ressum else: ressum = nums[0]+nums[1]+nums[2] delta = abs(target - ressum) i = 0 for i in xrange(0,numslen-2): indexi = i+1 indexj = numslen-1 while indexi < indexj: tmp = target - nums[i] - nums[indexi] - nums[indexj] if abs(tmp) < delta: delta = abs(tmp) ressum = target - tmp if tmp > 0 : indexi += 1 elif tmp < 0: indexj -= 1 else: break return ressum新聞熱點
疑難解答