输入一个数组表示积木的高度,求其能容纳的水的容积是多少?
输入:
// 数组的长度n,以及每个元素的值nums[i]
11
0 1 0 2 1 0 1 3 1 0 2
输出:
// 能容纳的水的容积
8
解题代码
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int test(){
int n;
cin >> n;
vector<int> nums(n, 0);
for (int i = 0; i < n; i++)
cin >> nums[i];
int volume = 0;
int start = 0;
// 找的第一个不为0的作为左边的墙
while (start < n && nums[start] == 0)
start++;
int i = start;
while (i < n){
int left_height = nums[i];
int v_cell = 0;
int len = 0;
while (++i<n && left_height>nums[i]){
v_cell = v_cell + left_height - nums[i];
len++;
}
// 处理特殊情况
if (i == n &&left_height > nums[n - 1]){
v_cell -= (left_height - nums[n - 1])*len;
if (v_cell < 0)v_cell = 0;
}
// 正常情况
volume += v_cell;
}
cout << volume << endl;
return 0;
}
结果
11
0 1 0 2 1 0 1 3 1 0 2
8
请按任意键继续. . .