如何解决使用堆栈的直方图中的最大矩形
嘿,朋友们,我正在解决这个问题,但我遇到了一个运行时错误,无法弄清楚为什么我的输入 [0,0] 会出现这个错误
如果在 0ms 响应时间内输入不是 [0,0],我的代码会给出正确答案..
这个问题和栈数据结构有关。这是屏幕截图和问题的链接..
链接 - https://leetcode.com/problems/largest-rectangle-in-histogram/
这是我输入 [0,0] 得到的错误
**这是我的代码** -
class Solution {
public:
int largestRectangleArea(vector<int>& h) {
vector<int> left,right;
stack<pair<int,int>> l,r;
//storing left smaller index
for(int i = 0; i < h.size(); i++){
if(l.empty()){
left.push_back(-1);
l.push({h[i],i});
}else if(l.top().first < h[i]){
left.push_back(l.top().second);
l.push({h[i],i});
}else if(!l.empty() && l.top().first > h[i]){
while(!l.empty() && l.top().first > h[i]){
l.pop();
}
if(l.empty()){
left.push_back(-1);
l.push({h[i],i});
}else{
left.push_back(l.top().second);
l.push({h[i],i});
}
}
}
//storing right smaller index
for(int i = h.size() - 1; i >= 0; i--){
if(r.empty()){
right.push_back(h.size());
r.push({h[i],i});
}else if(r.top().first < h[i]){
right.push_back(r.top().second);
r.push({h[i],i});
}else if(!r.empty() && r.top().first > h[i]){
while(!r.empty() && r.top().first > h[i]){
r.pop();
}
if(r.empty()){
right.push_back(h.size());
r.push({h[i],i});
}else{
right.push_back(r.top().second);
r.push({h[i],i});
}
}
}
reverse(right.begin(),right.end());
vector<int> ans;
int find;
for(int i = 0; i < h.size(); i++){
find = (right[i] - left[i]) - 1;
find = find*h[i];
ans.push_back(find);
}
return *max_element(ans.begin(),ans.end());
}
};
解决方法
好像 vector h
中的每个元素都一样,你的代码会被破解。在您的前 2 个 for loop
有 3 个 if
语句中,当它遇到向量 h 中的第二个元素时,如果 h[0] = h[1]
那么所有 3 个 if 语句都不会满足,所以 {{1} } 和 left
向量将只有 1 个元素,在最后一个 right
中你遍历了 for loop
中的所有元素,它大于 1,所以你的代码在这里破解。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。