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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值