📌  相关文章
📜  用任何正整数进行最小替换以使数组 K 递增(1)

📅  最后修改于: 2023-12-03 15:40:55.231000             🧑  作者: Mango

用任何正整数进行最小替换以使数组 K 递增

问题描述

给定一个非递减的整数数组 nums,你需要将这个数组中的每个元素替换成比该元素大的最小正整数,方法是用最小的可能的代价使得数组更改后变成一个递增数组。

返回最小代价。

解决思路

由于需要用最小的代价实现替换,那我们肯定需要尽可能少的替换。所以我们可以考虑将数组中每个元素都替换成比它大的最小正整数,如果这个最小正整数比该元素大,那么就说明需要替换,替换的代价就是两者之差。

如果替换后该元素比新的元素要小,那么就说明该元素可以不替换,因为后面的元素比它大,不会受到它的影响。

代码实现
class Solution:
    def minOperations(self, nums: List[int]) -> int:
        n = len(nums)
        res = 0
        for i in range(n):
            if i == 0:
                nums[i] = max(nums[i], 1)
            else:
                if nums[i] <= nums[i - 1]:
                    res += nums[i - 1] - nums[i] + 1
                    nums[i] = nums[i - 1] + 1
                else:
                    nums[i] = max(nums[i], nums[i - 1] + 1)
        return res
时间复杂度

这个算法时间复杂度为 $O(n)$,因为只需要遍历一次数组即可。

空间复杂度

这个算法空间复杂度为 $O(1)$,因为只用了常数个变量。