1827. 最少操作使数组递增
大约 2 分钟
1827. 最少操作使数组递增
- 标签:贪心、数组
- 难度:简单
题目链接
题目大意
描述:给定一个整数数组 (下标从 开始)。每一次操作中,你可以选择数组中的一个元素,并将它增加 。
- 比方说,如果 ,你可以选择增加 得到 。
要求:请你返回使 严格递增的最少操作次数。
说明:
- 我们称数组 是严格递增的,当它满足对于所有的 都有 。一个长度为 的数组是严格递增的一种特殊情况。
- 。
- 。
示例:
- 示例 1:
输入:nums = [1,1,1]
输出:3
解释:你可以进行如下操作:
1) 增加 nums[2] ,数组变为 [1,1,2]。
2) 增加 nums[1] ,数组变为 [1,2,2]。
3) 增加 nums[2] ,数组变为 [1,2,3]。
- 示例 2:
输入:nums = [1,5,2,4,1]
输出:14
解题思路
思路 1:贪心算法
题目要求使 严格递增的最少操作次数。当遇到 时,我们应该在满足要求的同时,尽可能使得操作次数最少,则 应增加到 时,此时操作次数最少,并且满足 。
具体操作步骤如下:
- 从左到右依次遍历数组元素。
- 如果遇到 时:
- 本次增加的最少操作次数为 ,将其计入答案中。
- 将 变为 。
- 遍历完返回答案 。
思路 1:代码
class Solution:
def minOperations(self, nums: List[int]) -> int:
ans = 0
for i in range(1, len(nums)):
if nums[i - 1] >= nums[i]:
ans += nums[i - 1] + 1 - nums[i]
nums[i] = nums[i - 1] + 1
return ans
思路 1:复杂度分析
- 时间复杂度:,其中 为数组 的长度。
- 空间复杂度:。