首页 > 其他 > 详细

59. 最接近的三数之和

时间:2020-06-26 19:06:22      阅读:60      评论:0      收藏:0      [点我收藏+]

59. 最接近的三数之和

中文English

给一个包含 n 个整数的数组 S, 找到和与给定整数 target 最接近的三元组,返回这三个数的和。

样例

例1:

输入:[2,7,11,15],3
输出:20
解释:
2+7+11=20

例2:

输入:[-1,2,1,-4],1
输出:2
解释:
-1+2+1=2

挑战

O(n^2) 时间, O(1) 额外空间。

注意事项

只需要返回三元组之和,无需返回三元组本身

输入测试数据 (每行一个参数)如何理解测试数据?
背向型双指针:
##三数之和
class Solution:
    """
    @param numbers: Give an array numbers of n integer
    @param target: An integer
    @return: return the sum of the three integers, the sum closest target.
    """
    def threeSumClosest(self, numbers, target):
        # write your code here
        #双指针,先固定一个值,然后循环判断另外两个值,三数之和和target进行比较,如果小于则更新,否则,不更新
        length = len(numbers)
        min_num,res = sys.maxsize, 0 

        numbers = sorted(numbers)

        #先固定一个值
        for i in range(length):
            value = numbers[i]

            #left,right表示另外两个
            left, right = 0, i - 1
            while left < right:
                sum = numbers[left] + numbers[right] + value 
                
                #在这里进行取差值最小的
                if (abs(sum - target) < min_num):
                    res = sum
                    min_num = abs(sum - target)
                
                #移动指针,控制sum的大小,保持sum - target之间的差值最小
                if sum > target:
                    right -= 1
                else:
                    left += 1
        
        return res

 

59. 最接近的三数之和

原文:https://www.cnblogs.com/yunxintryyoubest/p/13195732.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!