题解 | #递增数组#

递增数组

http://www.nowcoder.com/practice/d0907f3982874b489edde5071c96754a

一.题目描述
NC531递增数值
牛牛有一个数组array,牛牛可以每次选择一个连续的区间,让区间的数都加1,他想知道把这个数组变为严格单调递增,最少需要操作多少次?
二.算法(贪心)

基于贪心的思想,对于已经递增的区间我们不应该去处理,为了减少后面的操作次数,所以对于整个数组我们需要进行一次遍历,只需要处理非递增的区间就可以解决问题,下面是完整代码:

class Solution {
public:
    long long IncreasingArray(vector<int>& array) {
        long long ans=0;//ans返回最后的返回次数
        for(int i=0;i<array.size()-1;i++){
            ans+=max(0,array[i]+1-array[i+1]);
        }
        return ans;
    }
};

时间复杂度:只需要对数组进行一次遍历即可
空间复杂度:不需要额外空间返回答案
优缺点:基于贪心实现,思路清晰,代码简单。
三.算法(java实现)
思路和算法二相似,都是基于贪心的思想,下面是完整代码:

import java.util.*;
public class Solution {
    public long IncreasingArray (int[] array) {
        long sum=0;
        for (int i = 1; i < array.size(); ++i) {
            if (array[i] <= array[i-1]) {
                sum+=array[i-1]-array[i] + 1;
            }
        }
        return sum;
    }
}

时间复杂度:只需要对数组进行一次遍历即可
空间复杂度:不需要额外空间返回答案
优缺点:基于贪心实现,思路清晰,代码简单。

全部评论

相关推荐

做个有文化的流氓:Offer收割机
点赞 评论 收藏
分享
09-23 15:37
门头沟学院 Java
面了100年面试不知...:ai面:请你说一下在无的论文/项目中,你具体做了什么
我的秋招日记
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务