最少操作数使数组递增【LC1827】
给你一个整数数组
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
的数组是严格递增的一种特殊情况。
好忙好忙 终于赶上了今天的打卡 后天回家啦 明天应该是来不及滴
-
思路:贪心
- 局部最优:相邻两个数使用最少步骤使后一个值大于前一个值
- 那么nums[i]只需要比nums[i-1]大一即可
- 全局最优:使用最少的步骤使数组严格递增
- 局部最优:相邻两个数使用最少步骤使后一个值大于前一个值
-
实现:遍历整个数组得到最小操作数
class Solution { public int minOperations(int[] nums) { int n = nums.length; int ans = 0; for (int i = 1; i < n; i++){ if (nums[i] <= nums[i-1]){ ans += nums[i-1] - nums[i] + 1; nums[i] = nums[i-1] + 1; } } return ans; } }
- 复杂度
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1)
- 复杂度