题目描述
请实现一个简易的代码缩进功能:把一段未缩进的代码,通过多次操作,最终实现对没遗憾的缩进长度要求。
一次操作指南:
一次操作是缩进一个TAB长度。
一次操作可选择一行或连续多行同时缩进
现给出一段代码的每行缩进长度要求,用一个数字序列表示,请计算至少需要多少次操作才能实现。
解答要求
输入
一个整数n,表示代码总行数,取值范围:[1, 65535]。
接下来一行有n个整数,一次表示第1~n行的总缩进长度要求,取值范围:[0, 1000000]。
输出
一个整数,表示所需的最少操作次数。
样例
输入样例
5
2 2 1 3 2
输出样例:
4
输入样例:
5
1 2 3 2 1
输出样例:
3
解释:
第一次操作:全选中缩进1
第二次操作:选中中间3行,缩进1
第三次操作:选中第三行,缩进1.完成,共缩进3次。
理解:后一次缩进数量减去前一次需要缩进的数量,如果小于0,则这两个缩进可以一起处理,只需要记录最大值,如果后一次多于前一次,则需要再前一次的基础上增加缩进次数。
例如:2 2 1 3 2
前三个数字最大为2,也就是最多缩进两次就可以搞定前三行。
3 比前一个数 1大,也就是搞定前三个数的时候,最多可以将3也连带着缩进1次。那么后面的3只需要缩进 3 -1 = 2次就行。最后的2小于3,则将被3连带着一起缩进。
代码如下:
#include <iostream>
#include <vector>
using namespace std;
int codeTable(const vector<int> &arr)
{
int result = 0;
result = arr[0];
for(int i = 1; i < arr.size(); i++) {
if(arr[i] - arr[i-1] > 0) {
result += (arr[i] - arr[i-1]);
}
}
return result;
}
int main()
{
int count;
cin >> count;
vector<int> num(count);
for(int i = 0; i < count; i++) {
cin >> num[i];
}
cout << codeTable(num) << endl;
return 0;
}