Python程式:求解將子陣列遞增到目標陣列所需的最小遞增次數


假設我們有一個包含正值的陣列 target。現在考慮一個大小相同的陣列 initial,其所有值都為零。如果我們執行以下操作,我們需要找到從 initial 生成 target 陣列所需的最小操作次數:(從 initial 中選擇任何子陣列並將每個值加一。)

因此,如果輸入類似於 target = [2,3,4,3,2],則輸出將為 4,因為初始陣列為 [0,0,0,0,0]。第一次選擇從索引 0 到 4 的子陣列並將其增加 1,因此陣列將變為 [1,1,1,1,1],然後再次選擇從索引 0 到 4 的子陣列使其變為 [2,2,2,2,2],然後選擇索引 1 到 3 的元素並遞增,因此陣列將變為 [2,3,3,3,2],最後選擇索引 2 並使陣列變為 [2,3,4,3,2],這與 target 相同。

為了解決這個問題,我們將遵循以下步驟:

  • prev_num := 0

  • steps := 0

  • 對於 target 中的每個 val,執行:

    • 如果 val > prev_num,則 steps := steps + val - prev_num;否則 steps := 0

    • prev_num := val

  • 返回 steps

示例

讓我們看看下面的實現,以便更好地理解

def solve(target):
   prev_num = 0
   steps = 0
   for val in target:
      steps += val-prev_num if val > prev_num else 0
      prev_num = val
   return steps

target = [2,3,4,3,2]
print(solve(target))

輸入

[2,3,4,3,2]

輸出

4

更新於:2021年10月6日

249 次瀏覽

開啟你的職業生涯

完成課程獲得認證

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