首页 > 学院 > 开发设计 > 正文

Largest Rectangle

2019-11-08 01:24:44
字体:
来源:转载
供稿:网友

数组里最后加了一个零,所以下标为0-N.从1-N开始遍历,如果数值大,则为了求递增数组,如果数值小,则开始返回遍历求最大值 例如取1-N的某个中间值i,如果大的话,那么就不做计算直接往后,如果遇到小值的话,那么就计算前面递增序列的最大值,再往后遍历的话,MAX的最大值取决于I值最小(木桶原理)。(大概就是这种思想)

class Solution {public: int largestRectangleArea(vector<int>& height) { height.push_back(0); int n = height.size(); if (n < 1) return 0; int maxArea = height[0]; for (int i = 1; i < n; i++) { if (height[i-1] > height[i]) { int j = i -1; int curW = 0; while (j >= 0 && height[j] > height[i]) { curW++; maxArea = max(maxArea, height[j] * curW); height[j--] = height[i]; } } } return maxArea; }};
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表