59. 最接近的三数之和

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

 

posted @ 2020-06-26 17:53  风不再来  阅读(134)  评论(0编辑  收藏  举报