题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
class Solution {
public:
bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {
// 特殊情况
if (pushV.size() == 0)
return true;
int idx_push = 0;
int idx_pop = 0;
int length = pushV.size();
stack<int> temp;
// 出栈入栈总共的操作数是元素个数的两倍
for (int i = 0; i < length * 2; i++) {
if (!temp.empty() && temp.top() == popV[idx_pop]) {
temp.pop();
idx_pop++;
} else {
temp.push(pushV[idx_push++]);
}
}
return temp.empty();
}
};
需要注意的是第14行如果写为:if (temp.top() == popV[idx_pop] && temp.empty())则会报错,因为编译器会先判断temp.top()是否与popV[idx_pop]相等,如果此时temp为空则会报错。所以要先进行是否为空的判断。
