Leet代码 问题名称:155.最小堆栈
我试图解决这个问题,但每次都会遇到运行时错误。你愿意帮我解决吗?
class MinStack {
public:
vector<int> all;
vector<int>gettingMin;
MinStack() {
vector<int> all;
vector<int>gettingMin;
}
void push(int val) {
all.push_back(val);
int lastIndex = gettingMin.size() - 1;
int lastMinVal = gettingMin[lastIndex];
if(lastMinVal >= val) gettingMin.push_back(val);
else gettingMin.push_back(lastMinVal);
}
void pop() {
int lastIndex = gettingMin.size() - 1;
if(lastIndex < 0) return;
all.erase(all.begin()+lastIndex);
gettingMin.erase(gettingMin.begin()+lastIndex);
}
int top() {
int val = all.back();
return val;
}
int getMin() {
int val = gettingMin.back();
return val;
}
};
错误:
Line 1041: Char 34: runtime error: applying non-zero offset 18446744073709551612 to null pointer (stl_vector.h) SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/stl_vector.h:1046:34
发生运行时错误,帮助我理解。
在
push()
函数中,我没有检查空向量。添加以下检查器即可解决问题。
if(gettingMin.size() == 0)
{
gettingMin.push_back(val);
return;
}