牛客题霸-递增数组

牛客题霸-递增数组

牛牛有一个数组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的高度。

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;
    }
};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值