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