题目描述

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

示例

输入

[1,2,1]

返回值

2

说明

把第三个数字+2可以构成1,2,3

解题思路

使用贪心算法。遍历数组 arr[len] ,第 i 次区间为 [i, len],若 arr[i] < arr[i-1],那么区间所有数增加直到arr[i] = arr[i-1] + 1。不过本质就是数组第 i 个数需要比 i - 1 大 1,所以我们在 arr[i] < arr[i-1] 处直接求两个元素之间的差即可。

Java代码实现

public class Solution {
    public long IncreasingArray (int[] array) {
        long count = 0;
        for (int i = 1; i < array.length; ++i) {
            if (array[i] <= array[i-1]) {
                count += array[i-1] - array[i] + 1;
            }
        }
        return count;
    }
}