如果一个数组包含N个元素(元素可以重复),并且目标是使所有元素在元素上等于 +1 并且 -1 在每次迭代中的另一个元素上,我们如何确定是否可以规范化数组?什么是解决问题的最佳算法?
实施例
对于数组1 2 3
,如果我在1
上应用 +1 而在3
上应用 -1 ,则数组将变为2 2 2
。这意味着它可以在1次迭代中完成。
对于数组1 2 1
,不可能使所有元素都相等。
答案 0 :(得分:3)
首先,由于每次迭代都不会扰乱总和,因为你增加一个数字而减少另一个数字,最佳目标值将是平均值。
如果这个平均值是一个整数,你应该能够通过迭代实现它,但是如果平均值是一个小数,那么你将无法实现它。
步数将是每个数字与目标之间的距离之和除以2。
每次迭代都会选择一个高于目标的数字,然后选择一个数字并将操作应用于它们。
PS!根据评论,如果你想要的只是以下两个问题的答案:
然后答案是:
无论如何,如果你想让实际操作从输入到目标值,这里有一个更长的例子:
1 2 3 4 5 6 7 = 28, 28/7 = 4 (optimal target)
+ -
2 2 3 4 5 6 6
+ -
3 2 3 4 5 6 5
+ -
4 2 3 4 5 6 4
+ -
4 3 3 4 5 5 4
+ -
4 4 3 4 5 4 4
+ -
4 4 4 4 4 4 4
6个步骤,让我们总计距第一个数字的距离:
1 2 3 4 5 6 7
3 2 1 0 1 2 3 = 12, divided by 2 = 6
以下是对该问题的评论中的示例:
1 9 10 12 3 7 = 42 / 6 = 7 (optimal target)
的距离:
1 9 10 12 3 7
6 2 3 5 4 0 = 20, divided by 2 = 10 (steps)
1 9 10 12 3 7
+ - step 1
2 8 10 12 3 7
+ - step 2
3 7 10 12 3 7
+ - step 3
4 7 9 12 3 7
+ - step 4
5 7 8 12 3 7
+ - step 5
6 7 7 12 3 7
+ - step 6
7 7 7 11 3 7
- + step 7
7 7 7 10 4 7
- + step 8
7 7 7 9 5 7
- + step 9
7 7 7 8 6 7
- + step 10
7 7 7 7 7 7
这是一个更像伪代码的算法描述: