题目:
Given an array nums
of n integers and an integer target
, find three integers in nums
such that the sum is closest to target
. Return the sum of the three integers. You may assume that each input would have exactly one solution.
Example:
Given array nums = [-1, 2, 1, -4], and target = 1. The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
代码:
1 class Solution: 2 def threeSumClosest(self, nums: List[int], target: int) -> int: 3 closestTemp = float('inf') 4 nums.sort() 5 6 for p_i in range(len(nums)-2): 7 if(p_i > 0 and nums[p_i] == nums[p_i-1]): 8 continue 9 p_r = len(nums) -1 10 p_l = p_i + 1 11 while(p_l < p_r): 12 three_sum = nums[p_i] + nums[p_l] + nums[p_r] 13 if(abs(target - three_sum) < abs(target-closestTemp)): 14 closestTemp = three_sum 15 #print("new: ", closestTemp) 16 if(three_sum == target): 17 return three_sum 18 elif(three_sum < target): 19 p_l+=1 20 while(p_l < p_r and nums[p_l] == nums[p_l-1]): 21 p_l+=1 22 elif(three_sum > target): 23 p_r-=1 24 while(p_l < p_r and nums[p_r] == nums[p_r+1]): 25 p_r-=1 26 27 return closestTemp