到达同一位置的最小步数

问题描述 投票:0回答:1

我试图解决编码难题,但还没有找到好的解决方案。问题如下:

  • 给定具有N个整数的数组(正数和/或负数),您必须找到最小迭代次数,以使数组的所有元素都达到相同的值。如果无法完成,结果为-1。
  • 在每次迭代中,数组的所有元素必须采取一个步骤(+1或-1)。

例如,如果您从数组[4 2 0]开始,则最小迭代次数将为3,因为[4 2 0] -> [3 1 1] ->[2 2 2]。另一方面,如果您有[1 0],则答案将为-1(元素不可能达到相同的值)。

java python arrays loops counting
1个回答
0
投票

如果我正确理解了这个问题,我认为关键来自于注意:

[4, 0], [4, 2, 0], [4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0]

所有人都有相同的答案。仅有的两件事是:

  1. 知道最小和最大
  2. 所有数字具有相同的奇偶校验

因此,逐步遍历列表,并在每个点检查最小值,最大值,并确保该点的条目具有与所有其他数字相同的奇偶校验。

在python中,可能看起来像:

current_min, current_max  = float("inf"), float("-inf")
parity = numbers[0] % 2
for entry in numbers:
    if entry % 2 != parity:
        return -1
    current_min, current_max = min(entry, current_min), max(entry, current_max)
return (current_max - current_min) / 2
© www.soinside.com 2019 - 2024. All rights reserved.