zoukankan      html  css  js  c++  java
  • 3Sum Closest

    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.

        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).
    
    分析:
    问题是从数列中找到3个数其和与给定值最接近。只要给出最终的和即可。
     
    从解法上来讲比3Sum要简单,因为不用处理所有情况,也无需排序去重。但是通过dict映射的解法不再适合,因为求的值是未知的,看了一些网络上的讨论,基本都是同一种算法。无论用哪种编程语言,写出的代码都很相似。
    class Solution:
    
        # @return an integer
        def threeSumClosest(self, num, target):
            num.sort()
            diff = 10 ** 8
            ret = diff
            for i in range(len(num)):
                start = i + 1
                end = len(num) - 1
                while start < end:
                    val = num[start] + num[i] + num[end]
                    tmp = abs(target - val)
                    if tmp < diff:
                        diff = tmp
                        ret = val
                    if val == target:
                        return val
                    elif val < target:
                        start += 1
                    else:
                        end -= 1
            return ret
    
    if __name__ == '__main__':
        s = Solution()
        assert s.threeSumClosest([-1, 2, 1, -4], 1) == 2
        assert s.threeSumClosest([1, 1, 1, 1], 0) == 3
        assert s.threeSumClosest([1, 1, 1, 1], -100) == 3
        print 'PASS'
    小结:
    从算法角度而言上面的代码是优雅的,这种计算问题即使是Python也很难做到在可读性和稳定性上明显优于其它语言实现。
     
  • 相关阅读:
    重量传感器
    cotex_m3内核提供的ITM串口打印调试
    unsigned char 转字符串:
    手工双面打印
    Windows系统(服务器)忘记管理员登录密码:
    标准电流信号为什么是4-20MA?(网络摘录)
    LPC1768之ISP
    万用表的位数
    485收发控制器:
    [LeetCode] 534. Design TinyURL 设计短网址
  • 原文地址:https://www.cnblogs.com/openqt/p/4039296.html
Copyright © 2011-2022 走看看