015拼多多-两两配对差值最小

问题描述:

给定一个长度为偶数的数组arr,将该数组中的数字两两配对并求和,在这些和中选出最大和最小值,请问该如何两两配对,才能让最大值和最小值的差值最小?

输入描述:

一共2行输入。 第一行为一个整数n,2<=n<=10000, 第二行为n个数,组成目标数组,每个数大于等于2,小于等于100。

输出描述:

输出最小的差值。

示例输入:

4
2 6 4 3
6
11 4 3 5 7 1

示例输出:

1
3

思路:

这题万级数据限制1s,如果是穷举的话肯定行不通,得想一个好点的算法策略。
我们认为当前最大值和当前最小值进行的配对差值应当是比较小的。所以我们可以根据这个算法策略来贪心的进行配对,记录最大值和最小值,返回其差值即可。

AC代码:

def solution():
    n = int(input())
    data = list(map(int,input().split()))
    maxs = 0
    mins = 200
    while n:
        cur_max = max(data)
        cur_min = min(data)
        cur_data = cur_max+cur_min
        if cur_data > maxs:
            maxs = cur_data
        if cur_data < mins:
            mins = cur_data
        data.remove(cur_max)
        data.remove(cur_min)
        n -= 2
    print(maxs-mins)
solution()

你可能感兴趣的:(牛客2019校招编程题)