47 lines
1.3 KiB
Markdown
47 lines
1.3 KiB
Markdown
# 题目链接
|
|
|
|
# 思路
|
|
// 只要一个柱子的
|
|
// 暴力的解法 都不好写啊
|
|
// 找左面最大的, 找右边最大的,找左右边际的时候容易迷糊。我已开始还找左大于右的。 (还不够)
|
|
// 每次记录单条,不要记录整个面积
|
|
|
|
# C++代码
|
|
|
|
按照列来
|
|
```
|
|
class Solution {
|
|
public:
|
|
int trap(vector<int>& height) {
|
|
int sum = 0;
|
|
// for (int i = 0; i < height.size(); i++) {
|
|
// cout << height[i] << " ";
|
|
// }
|
|
// cout << endl;
|
|
for (int i = 0; i < height.size(); i++) {
|
|
if (i == 0 || i == height.size() - 1) continue;
|
|
|
|
int lIndex, rIndex;
|
|
int rValue = height[i];
|
|
int lValue = height[i];
|
|
for (int r = i + 1; r < height.size(); r++) {
|
|
if (height[r] > rValue) {
|
|
rValue = height[r];
|
|
rIndex = r;
|
|
}
|
|
}
|
|
for (int l = i - 1; l >= 0; l--) {
|
|
if (height[l] > lValue) {
|
|
lValue = height[l];
|
|
lIndex = l;
|
|
}
|
|
}
|
|
int h = min(lValue, rValue) - height[i];
|
|
// 我为啥要算 (rIndex - lIndex + 1);就是按照行 按照列 区分不清啊
|
|
if (h > 0) sum += h;
|
|
}
|
|
return sum;
|
|
}
|
|
};
|
|
```
|