本文主要是介绍【剑指offr--C/C++】JZ31 栈的压入、弹出序列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、题目
二、思路及代码
借助一个辅助栈来模拟入栈过程,
①在入栈之前先判断当前要入栈的元素是否与出栈数组当前元素相同,
② 如果不相同就入栈;
③如果相同就不用入栈了(不入栈=出栈),然后再依次取出栈的栈顶元素看是否与出栈数组当前值相同,相同的话就依次出栈,知道不再相等或者全部出栈;
④若入栈元素还没有遍历完,就继续重复前三个步骤
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param pushV int整型vector * @param popV int整型vector * @return bool布尔型*/bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {// write code hereint 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]);}//每处理完一个入栈数组元素就+1i++;}if(st.empty()) return true;return false;}private:stack<int>st;
};
这篇关于【剑指offr--C/C++】JZ31 栈的压入、弹出序列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!