題目連結:
題目意譯:
你被給定一整數陣列 nums(索引值從 0 開始)。在一次操作中,你可以選擇陣列中的一個元素並將其值增加 1。
例如,如果 nums = [1,2,3],你可以選擇增加 nums[1] 使得 nums = [1,3,3]。
回傳使得 nums 嚴格遞增的最少所需操作數。
一個陣列 nums 如果滿足對於所有 0 ≦ i < nums.length - 1 而 nums[i] < nums[i+1],則其為嚴格遞增。一個長度為 1 的陣列視為嚴格遞增。
限制:
1 ≦ nums.length ≦ 5000
1 ≦ nums[i] ≦ 10 ^ 4
範例測資:
範例 1:
輸入: nums = [1,1,1]
輸出: 3
解釋: 你可以做出以下操作:
1) 增加 numms[2],所以 nums 變為 [1,1,2]。
2) 增加 numms[1],所以 nums 變為 [1,2,2]。
3) 增加 numms[2],所以 nums 變為 [1,2,3]。
範例 2:
輸入: nums = [1,5,2,4,1]
輸出: 14
範例 3:
輸入: nums = [8]
輸出: 0
解題思維:
可以看到 nums[0] 在最佳策略下不應增加其值,而 nums[1] 應至少加到 > nums[0]、nums[2] 應至少加到 > 修改後的 nums[1] ……以此類推。
因此我們可以直接從 nums[1] 掃到陣列結尾,期間只要 nums[i - 1] >= nums[i],則需要 nums[i - 1] - nums[i] + 1 次的操作以將 nums[i] 之值變為 nums[i - 1] + 1。
掃完之後的操作次數總和即是所求最少所需次數。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。