第十一天:《LeetCode一天一例》-----从一个集合中找出三个数,和最接近目标值target(python实现)

找三个数最接近目标值

题目: s = [-1, 2, 1, -4],  target = 0 。。 我们要做的就是从s中找出三个数,和加起来最接近0。。 怎么做呢?? 

分析:

       看到这种题,数字不多,用蛮力

       我的想法是:

              第一步: 对s列表中的值进行排序      

              第二步: 固定一个值,然后设两个指针,一个指向固定值之后的值,一个执行列表的末尾值

              第三步:移动两个指针,怎样移动呢?  当前固定位置的值+第一个指针指向的值+第二个指针指向的值 如果大于目标值,由于事先我们排序了,现在超出人家的目标值了,说明我们加的数太大了,我们让后面的指针向前移动一步。。如果当前固定位置的值+第一个指针指向的值+第二个指针指向的值 小于目标值,说明我们的值还没有到达目标值,怎样做呢? 肯定是将第一个指针往后移动(这样可以让总体的值大)。。

              第四步: 计算当前和减去减去目标值有没有减小,如果有减小,将其保存在result 

              第五步:以此类推,固定第二个值,在进行二,三,四步。。最后的result中保存的就是我们的最优值。。

Python代码实现:

import math
def find_close_target(s, target):
    length = len(s)
    # 初始化  随便给个值都可以
    result = s[0] + s[1] + s[length-1]

    sum = 0
    for i in range(0, length-2):
        start = i+1
        end = length-1
        while start < end:
            sum = s[i] + s[start] + s[end]
            if sum > target:
                end -= 1
            else:
                start += 1
        if math.fabs(sum-target) < math.fabs(result-target):
            result = sum

    return result


if __name__ == '__main__':
    s = [-1, 2, 1, -4]
    target = 0

    # 首先对s进行排序
    s = sorted(s)
    # 从s中找三个数,使其最接近1
    result = find_close_target(s, target)

    print('最接近target的值为:', result)

输出结果:


 

     

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

传道解惑也

打赏一下咯

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值