lintcode练习-59. 最接近的三数之和

描述

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

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

您在真实的面试中是否遇到过这个题?  是

样例

例如 S = [-1, 2, 1, -4] and target = 1. 和最接近 1 的三元组是 -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
        numbers.sort()
        ans = None
        for i in range(len(numbers)):
            l, r = i+1, len(numbers)-1
            while l < r:
                sum = numbers[l] + numbers[r] + numbers[i]
                #既然离得最近了,那么和也应该是最小的
                if ans is None or abs(sum-target) < abs(ans-target):
                    ans = sum
                if sum <= target:
                    l+=1 
                else:
                    r=r-1
        return ans
            
                
        
        

猜你喜欢

转载自blog.csdn.net/qq_36387683/article/details/81429777
今日推荐