在 Python 中使所有数组元素相等所需的操作数

pythonserver side programmingprogramming

我们给出了一个元素数组,我们必须通过将元素递增 1 来使它们全部相等。我们可以在每个步骤中递增 n - 1 个元素。我们的目标是计算使所有数组元素相等所需的总操作数。

例如,如果您取列表 [1, 2, 3],则需要三个操作才能使所有元素相等。该问题的一个解决方案是。在每个步骤中找到最重要的数字,并将其余元素递增 1。让我们编写代码。

示例

def main():
   # 初始化数组
   arr = [1, 2, 3]
   # 将操作计数初始化为 0
   no_of_operations = 0
   flag = 0
   # 对数组执行操作使它们相等
   while not are_equal(arr):
      flag = 1
      # 从列表中查找最大值
      maximum = max(arr)
      # 增加除最大值之外的所有元素
      for i in range(len(arr)):
         if arr[i] != maximum:
            arr[i] += 1
      # 将操作数增加 1
      no_of_operations += 1
   print(no_of_operations) if flag == 0 else print(no_of_operations + 1)
# 检查所有元素是否相等
def are_equal(arr):
   global no_of_operations
   for i in range(len(arr) - 1):
      if arr[i] != arr[i + 1]:
         return False
   return True
if __name__ == '__main__':
   main()

输出

如果你运行上述程序,你将得到以下结果。

3

对于大型数组,上述方法需要更多时间进行计算。我们可以通过查找数组的总和和最小元素来找到操作次数。

  • 查找数组的总和。
  • 查找数组中所有元素中最小的元素。
  • 打印从表达式 sum - (length - minimal)获得的值。

示例

参见下面的代码。

# 初始化数组
arr = [1, 2, 3]
# 长度
length = len(arr)
# 数组元素的总和
elements_sum = sum(arr)
# 所有元素中最小的元素
smallest = min(arr)
# 计算操作次数
print(elements_sum - (length *最小)) 

输出

如果您运行上述代码,您将获得以下结果。

 3 

结论

与第一种方法相比,我们讨论的第二种方法更简单,花费的时间更少。如果您对教程有任何疑问,请在评论部分提出。


相关文章