题目:
题解:
int trap(int* height, int heightSize) {
int n = heightSize;
if (n == 0) {
return 0;
}
int leftMax[n];
memset(leftMax, 0, sizeof(leftMax));
leftMax[0] = height[0];
for (int i = 1; i < n; ++i) {
leftMax[i] = fmax(leftMax[i - 1], height[i]);
}
int rightMax[n];
memset(rightMax, 0, sizeof(rightMax));
rightMax[n - 1] = height[n - 1];
for (int i = n - 2; i >= 0; --i) {
rightMax[i] = fmax(rightMax[i + 1], height[i]);
}
int ans = 0;
for (int i = 0; i < n; ++i) {
ans += fmin(leftMax[i], rightMax[i]) - height[i];
}
return ans;
}