【难】【DP】计算“skyline”下的最大矩形面积

来源:互联网 发布:网络搞笑歌曲你是谁 编辑:程序博客网 时间:2024/04/29 02:00

题目:EPI

int calculate_largest_rectangle(const vector<int> &A){if (A.empty())return -1;stack<int> s;vector<int> left(A.size());vector<int> right(A.size());//计算左边边界for (int i = 0; i < A.size(); i++){while (!s.empty() && A[s.top()] >= A[i])s.pop();//s.empty()时,表示左边没有限制,可以一直到A[0]left[i] = s.empty() ? 0 : s.top() + 1;s.push(i);}while (!s.empty())s.pop();//计算右边边界for (int i = A.size() - 1; i >= 0; i--){while (!s.empty() && A[s.top()] >= A[i])s.pop();//s.empty()时,表示右边没有限制,可以一直到A[A.size()-1]right[i] = s.empty() ? A.size() - 1 : s.top() - 1;s.push(i);}//计算最大矩阵int max = -1;for (int i = 0; i < A.size(); i++){//A[i]是矩阵的高,right[i] - left[i] + 1是矩阵的宽(沿数轴)int tmp = A[i] * (right[i] - left[i] + 1);if (tmp > max)max = tmp;}return max;}



0 0