1.题目描述
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.
在数组S中找到三个数字的和最接近目标数字,返回这个和的值
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).
2.题目分析
先将数组排序。然后先固定一个元素,然后双指针分别从头尾遍历。遇见和等于目标数字的直接返回目标数字,否则继续遍历,找到最接近目标数字的值。
3.解题思路
1 class Solution(object): 2 def threeSumClosest(self, nums, target): 3 """ 4 :type nums: List[int] 5 :type target: int 6 :rtype: int 7 """ 8 temp=2**31-1 #给temp一个最大值 9 nums.sort() #nums列表排序 10 l=len(nums) 11 i=0 12 while i<l-2: 13 left=i+1 14 right=l-1 15 while left<right: 16 sum=nums[i]+nums[left]+nums[right] 17 if sum==target: #sum与target相等,返回target 18 return target 19 else: 20 if abs(sum-target)<abs(temp-target): #如果当前sum更接近目标数字,temp为当前sum 21 temp=sum 22 if sum-target>0: #如果sum比目标数字大,右指针移动 23 right-=1 24 else: #否则左指针移动 25 left+=1 26 i+=1 27 return temp