39.leetcode16_3sum_cloest

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
原文地址:https://www.cnblogs.com/19991201xiao/p/8470785.html