【发布时间】:2012-02-17 05:46:02
【问题描述】:
我们有一个由 n 个正整数组成的数组。一个可接受的做法是将一个元素增加 1 并将其相邻元素之一减少 1。
最终数组中的最小值和最大值最多相差 1。这样做的最小移动次数是多少?
例如,如果初始数组是 {5, 6, 4, 1, 10},则答案是 5,最终数组可能是 {5, 5, 5, 5, 6}。
【问题讨论】:
-
我没有任何多项式算法。
-
SO 不会只给你算法。你有没有想过这个问题并想出一些直觉?
-
如果我们知道目标数组,它将在 O(n) 中求解;只是扫阵并贪婪地移动。我猜可能存在一个动态解决方案,比如在数组的后缀中有 k 个最大值,但之前需要一些贪婪的动作。