两两配对差值最小

答案

在这里 https://www.nowcoder.com/questionTerminal/60594521f1db4d75ad78266b0b35cfbb ,将最大和最小值配对即可

证明

如何证明这个做法正确呢?用反证法和递推法即可。首先,假设数组中有数字a,b,c,d,其中a是数组中最小的数,d是数组中最大的数,b与c是中间的两个数字。并且有a < b < c < d

c和b不必要是第二大/小的数字

现在,我们看向数组中最大的数字d。我们认为,当进行(a, d)、(b,c)的组合时,能得到最优解。假如它不是,那么组合的方式可以是:

  1. (d, c)、(a, b)。
  2. (d, b)、(a, c)。

下面对这两种情况分别讨论。先设 f m a x f_{max} fmax f m i n f_{min} fmin分别为某个组合方式下的最大值与最小值。且:

  • f m a x ( a , d ) f_{max}(a, d) fmax(a,d)为作(a, d)、(b,c)的组合时的最大值, f m i n ( a , d ) f_{min}(a, d) fmin(a,d)为这个组合下的最小值。该组合命名为组合0。
  • f m a x ( a , b ) f_{max}(a, b) fmax(a,b)为作(d, c)、(a, b)的组合时的最大值, f m i n ( a , b ) f_{min}(a, b) fmin(a,b)为其最小值。该组合命名为组合1。
  • f m a x ( a , c ) f_{max}(a, c) fmax
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值