牛客题霸-递增数组

牛客题霸-递增数组

牛牛有一个数组array,牛牛可以每次选择一个连续的区间,让区间的数都加1,他想知道把这个数组变为严格单调递增,最少需要操作多少次?

输入:
给定array数组
1 <= array.size <= 2105
1 <= array[i] <= 1
109

输出:
返回最小次数

输入
[1, 2, 1, 2]

输出
2

说明
array[2]和array[3]都+2,变成[1,2,3,4],只需两次操作

本题采用贪心算法,array[i] 至少比 array[i-1] 多1。
且每次操作时, 惠及array[j] (j >= i)。
过程如下图所示牛客题霸-递增数组_第1张图片
由图可见,要使方块高度严格递增,每一列至少要达到前一列的高度加一,既然每次操作时是对一个区间加一,不如把这个区间从修改列扩大到末尾,这样后方方块的相对高度没有发生改变,最少的操作次数就是把每一列提高到至少比前一列高1的高度。

class Solution {
public:
    long long IncreasingArray(vector<int>& array) {
        long long res = 0;
        for(int i = 1; i < array.size(); i++) {
            res +=  max(array[i-1] + 1 - array[i], 0);
        }
        return res;
    }
};

你可能感兴趣的:(牛客题霸-递增数组)