Python中使所有陣列元素相等的所需操作次數


我們給定一個元素陣列,我們必須透過將元素遞增 1 來使它們全部相等。我們允許在每個步驟遞增 n - 1 個元素。我們的目標是計算使所有陣列元素相等所需的總操作次數。

例如,如果您取列表 [1, 2, 3],則需要三個操作才能使所有元素相等。解決這個問題的一種方法是:在每一步找到最大的數字,並將其餘元素遞增 1。讓我們編寫程式碼。

示例

 線上演示

def main():
   # intializing the array
   arr = [1, 2, 3]
   # initializing operations count to 0
   no_of_operations = 0
   flag = 0
   # performing the operations on array to make them equal
   while not are_equal(arr):
      flag = 1
      # finding the maximum from the list
      maximum = max(arr)
      # incrementing all the elements except maximum
      for i in range(len(arr)):
         if arr[i] != maximum:
            arr[i] += 1
      # incrementing the operations count by 1
      no_of_operations += 1
   print(no_of_operations) if flag == 0 else print(no_of_operations + 1)
# checking whether all the elements are equal or not
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 - smallest) 得到的值。

示例

請看下面的程式碼。

 線上演示

# initializing an array
arr = [1, 2, 3]
# length
length = len(arr)
# sum of element fo the array
elements_sum = sum(arr)
# smallest among all the elements
smallest = min(arr)
# calculating the number of operations
print(elements_sum - (length * smallest))

輸出

如果您執行上述程式碼,您將得到以下結果。

3

結論

我們討論的第二種方法比第一種方法更容易,並且花費的時間更少。如果您在本教程中有任何疑問,請在評論部分中提出。

更新於:2020年1月2日

400 次瀏覽

開啟您的職業生涯

完成課程後獲得認證

開始學習
廣告
© . All rights reserved.