最少操作数使数组递增【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 ( 1 )