我正在解决以下算法难题,以下是详细的问题陈述。
找到柱状图中最大的矩形; 例如,给定柱状图 = [2,1,5,6,2,3],该算法应返回10。
我正在处理以下版本的代码。我的问题是,我认为i-nextTop-1
可以被i-top
替换,但在一些测试用例中(例如[2,1,2]),它们产生不同的结果(i-nextTop-1
总是生成正确的结果)。 我认为逻辑上它们应该是相同的,并想知道在什么情况下i-nextTop-1
不等于i-top
。
class Solution {
public:
int largestRectangleArea(vector<int>& height) {
height.push_back(0);
int result=0;
stack<int> indexStack;
for(int i=0;i<height.size();i++){
while(!indexStack.empty()&&height[i]<height[indexStack.top()]){
int top=indexStack.top();
indexStack.pop();
int nextTop=indexStack.size()==0?-1:indexStack.top();
result=max((i-nextTop-1)*height[top],result);
}
indexStack.push(i);
}
return result;
}
};