数组里最后加了一个零,所以下标为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;
}
};