
这一题的思路和下面一题是一摸一一样的,都是模拟一个栈的过程。
因此代码是简单的:
c++
class Solution {
public:
int cut=0;
stack<int> s;
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
for(int i=0;i<popped.size();i++)
{
while(s.empty()||s.top()!=popped[i])
{
if(cut>=pushed.size())
{
return false;
}
int x=pushed[cut];
s.push(x);
if(s.size()>popped.size())
{
return false;
}
cut++;
}
s.pop();
}
return true;
}
};
我在写的时候出现了报错
出现了堆缓冲区溢出,访问 std::vector 时越界了。原因是我当时写的是
c++
if(cut>pushed.size())
{
return false;
}
应该是
c++
if(cut>=pushed.size())
{
return false;
}
因为cut是从0开始的,所以不能cut==pushed.size(),如果把cut=pushed.size(),让它push到栈中,就会出现访问越界。
以后写要注意啊