您的位置:首页 > 职场人生

[LeetCode] Largest Rectangle in Histogram

2013-01-25 02:02 531 查看
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)

复杂度分析很蛋疼... 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息