【发布时间】:2021-04-11 08:07:57
【问题描述】:
问题
我得到了一个n <= 100 正整数序列。
如何找到通过重新排列数组中的元素可以达到的元素之间的最大可能组合差异?
例如,对于序列 {8, 4, 1, 2, 3},起始差为 (8-4) + (4-1) + (2-1) + (3-2) = 9,但对于 {4, 8, 1, 3, 2} 可以达到 14。
最好的排列是{4, 1, 8, 2, 3}。预期的答案将是可以达到的最大值,因此在本例中为 17。
我的方法
-
我会对数组进行排序,然后创建一个 Python
collections.deque()以交替附加到两侧的最小和最大元素;这有意义吗? -
这种幼稚的方法不正确吗?
-
我们可以尝试两种情况,从最小元素和最大元素开始。
排列数可以达到100!所以没有野蛮人会这样做。
一些代码
input_data = [int(x) for x in input().split(" ")]
input_data.sort()
def maximum_difference_sort(data: list, *, start_with_max):
queue = deque()
indices = [0, -1] if start_with_max else [-1, 0]
queue.append(data.pop(indices[1]))
while True:
try:
queue.append(data.pop(indices[0]))
queue.appendleft(data.pop(indices[0]))
queue.append(data.pop(indices[1]))
queue.appendleft(data.pop(indices[1]))
except IndexError:
break
return list(queue)
def combined_difference(seq):
s = 0
for i in range(1, len(seq)):
s += abs(seq[i] - seq[i-1])
return s
print(combined_difference(maximum_difference_sort(input_data, start_with_max=True)))```
【问题讨论】:
-
@FedericoBaù 很明显,这是一个操作方法问题,并且没有源代码......(对不起,如果这看起来很粗鲁,但你读过这个问题了吗?)
-
虽然这类问题在 SO 上只有一半的人接受。
-
@Kangaroo976 你的问题是从哪里来的? (作业?)
-
这不是作业哈哈,至少不是我的。只是我在网上某处发现的一个有趣的问题。我最近一直在考虑它,但我真的没有看到任何可以保证有效的好的解决方案。
标签: python algorithm sorting optimization max