题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
class Solution {
private:
bool isBehind(int pushIndex, int popNum, std::vector<int>& pushV) {
bool result = false;
for (int j = pushIndex; j < pushV.size(); j++) {
if (pushV[j] == popNum) result = true; // 在index位置的后面
}
return result;
}
public:
bool IsPopOrder(std::vector<int>& pushV, std::vector<int>& popV) {
if (popV.size() == 0 || pushV.size() == 0) return false;
std::stack<int> stack;
int pushIndex = 0;
int temp = 0;
for (int i = 0; i < popV.size(); i++) {
int popNum = popV[i];
if (stack.empty() || stack.top() != popNum) {
if (isBehind(pushIndex, popNum, pushV)) {
while (pushV[pushIndex] != popNum) { // 将相应的值压入堆栈
stack.push(pushV[pushIndex]);
pushIndex++;
}
} else return false;
pushIndex++;
}
else if (stack.top() == popNum) {
stack.pop();
}
}
return true;
}
};
查看13道真题和解析