class Solution {
public:
int largestRectangleArea(vector<int> &height) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int n = height.size();
vector<int> left(n);
vector<int> right(n);
for (int i = 0; i < n; i++) {
left[i] = i;
right[i] = i;
}
for (int i = 1; i < n; i++) {
int j = i;
while (j > 0 && height[i] <= height[j - 1])
j = left[j - 1];
left[i] = j;
}
for (int i = n - 2; i >= 0; i--) {
int j = i;
while (j < n - 1 && height[i] <= height[j + 1])
j = right[j + 1];
right[i] = j;
}
int ret = 0;
for (int i = 0; i < n; i++) {
ret = max(ret, height[i] * (right[i] - left[i] + 1));
}
return ret;
}
};
Small Case: 12ms
Large Case: 80ms
Time: O(nlgn)
Space: O(n)
复杂度分析很蛋疼...