答案
在这里 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)的组合时,能得到最优解。假如它不是,那么组合的方式可以是:
- (d, c)、(a, b)。
- (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