题解 | 栈的压入、弹出序列
栈的压入、弹出序列
https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
#include <stack>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pushV int整型vector
* @param popV int整型vector
* @return bool布尔型
*/
bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {
// write code here
std::stack<int> stack;
for (int i = 0, j = 0; i < pushV.size() || j < popV.size(); ) {
if (pushV[i] != popV[j]) {
if (stack.empty()) {
stack.push(pushV[i]);
i++;
continue;
} else {
if (stack.top() != popV[j]) {
stack.push(pushV[i]);
i++;
continue;
} else {
stack.pop();
j++;
continue;
}
}
} else {
i++;
j++;
continue;
}
}
return stack.empty();
}
};
我的思路是:
1.分别取两个下标代表进栈数组和出栈数组;
2.循环判断进栈数组和出栈数组对应下标的值是否相等:
1)不相等:
判断栈是否为空,
空则进栈,进栈数组下标递增;
非空则判断栈顶元素与出栈数组值是否相等:
a)不相等,则进栈,进栈数组下标递增;
b)相等,则出栈,出栈数组下标递增;
2)相等:
则进栈、出栈数组下标都递增(模拟进栈数组进栈又出栈,减少进栈出栈消耗)。
循环结束,返回栈是否为空即可。

