class Solution {
public:
int trap(vector<int>& height) {
int sum = 0;
for(int i = 0; i < height.size(); i++) {
if(i == 0 || i == height.size() - 1) {
continue;
}
int r_height = height[i];
int l_height = height[i];
for(int r = i + 1; r < height.size(); r++) {
if(height[r] > r_height) {
r_height = height[r];
}
}
for(int l = i - 1; l >= 0; l--) {
if(height[l] > l_height) {
l_height = height[l];
}
}
int h = min(l_height, r_height) - height[i];
if(h > 0) {
sum += h;
}
}
return sum;
}
};
class Solution {
public:
int trap(vector<int>& height) {
if(height.size() <= 2) {
return 0;
}
int size = height.size();
vector<int> maxLeft(size, 0);
vector<int> maxRight(size, 0);
maxLeft[0] = height[0];
for(int i = 1; i < size; i++) {
maxLeft[i] = max(height[i], maxLeft[i - 1]);
}
maxRight[size - 1] = height[size - 1];
for(int i = size - 2; i >= 0; i--) {
maxRight[i] = max(height[i], maxRight[i + 1]);
}
int sum = 0;
for(int i = 0; i < size; i++) {
int h = min(maxLeft[i], maxRight[i]) - height[i];
if(h > 0) {
sum += h;
}
}
return sum;
}
};
class Solution {
public:
int trap(vector<int>& height) {
stack<int> st;
st.push(0);
int sum = 0;
for (int i = 1; i < height.size(); i++) {
while (!st.empty() && height[i] > height[st.top()]) {
int mid = st.top();
st.pop();
if (!st.empty()) {
int h = min(height[st.top()], height[i]) - height[mid];
int w = i - st.top() - 1;
sum += h * w;
}
}
st.push(i);
}
return sum;
}
};