zoukankan      html  css  js  c++  java
  • 双指针——最接近的三数之和,细节处理还是很关键的

    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
            numbers.sort()
    
            s = diff = float('inf')
    
            def find_nearest(arr, k, t, n):
                nonlocal s,diff
                l, r = k, len(arr) - 1
                while l < r:
                    if arr[l] + arr[r] > t:
                        if arr[l] + arr[r] - t < diff:
                            s = arr[l] + arr[r] + n
                            diff = arr[l] + arr[r] - t
                        r -= 1
                    else:
                        if t - arr[l] - arr[r] < diff:
                            s = arr[l] + arr[r] + n
                            diff = t - arr[l] - arr[r]
                        l += 1
                return s
    
            for i, n in enumerate(numbers):
                if i > 0 and numbers[i] == numbers[i - 1]:
                    continue
                find_nearest(numbers, i + 1, target - n, n)
    
            return s
    
  • 相关阅读:
    sql命令附加数据库
    数据解析0102
    xml file parser
    c#字定义异常处理类
    simple workflow implement
    High Performance Multithreaded Work Item / Event Scheduling Engine
    字符定位
    C#实现的不重复随机数序列生成算法
    Thread并发数控制
    通过Assembly来创建Type Instance
  • 原文地址:https://www.cnblogs.com/bonelee/p/14269623.html
Copyright © 2011-2022 走看看