一、题目
二、思路及代码
借助一个辅助栈来模拟入栈过程,
①在入栈之前先判断当前要入栈的元素是否与出栈数组当前元素相同,
② 如果不相同就入栈;
③如果相同就不用入栈了(不入栈=出栈),然后再依次取出栈的栈顶元素看是否与出栈数组当前值相同,相同的话就依次出栈,知道不再相等或者全部出栈;
④若入栈元素还没有遍历完,就继续重复前三个步骤
cpp
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pushV int整型vector
* @param popV int整型vector
* @return bool布尔型
*/
bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {
// write code here
int i=0;
int j=0;
for(i,j;i<pushV.size(),j<popV.size();){
//相同就不入栈
if(pushV[i]==popV[j]){
j++;
//遍历栈顶元素,若与出栈元素相同就出栈
while(j<popV.size()&&!st.empty() && st.top()==popV[j]){
j++;
st.pop();
}
}else{
//不相同就入栈
st.push(pushV[i]);
}
//每处理完一个入栈数组元素就+1
i++;
}
if(st.empty()) return true;
return false;
}
private:
stack<int>st;
};