【问题标题】:Minimum Number of Steps to reach Same Position到达同一位置的最小步数
【发布时间】:2020-05-19 19:14:22
【问题描述】:

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

  • 给定一个大小为 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】:

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

    [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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      • 2014-05-17
      • 1970-01-01
      相关资源
      最近更新 更多