剑指offer--栈的压入、弹出序列
来源:互联网 发布:知乎 大泽佑香 编辑:程序博客网 时间:2024/06/18 14:41
面试题22:栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。
思路:按照题目中的例子,序列1为1、2、3、4、5,序列2为4、5、3、2、1。定义一个辅助栈,按照序列2的出栈顺序入栈。现在4要出栈,就必须把1,2,3入栈。然后4入栈再出栈,5入栈再出栈。3,2,1再出栈
//栈的压入弹出序列bool IsPopOrder(const int*arr,const int*brr,int len){ assert(arr!=NULL && brr!=NULL && len>0); int i = 0;//第一个序列的下标 int j = 0;//第二个序列的下标 stack<int> dataStack;//辅助栈 while(j < len) { //要出栈的元素 之前的元素必须全部入栈 while(dataStack.empty() || dataStack.top()!=brr[j]) { dataStack.push(arr[i]); i++; } if(dataStack.top() != brr[j]) break; //按照第二个序列出栈 dataStack.pop(); j++; } //第二个序列的值已经全部出栈,栈为空 if(dataStack.empty() && j==len) return true; else return false;}int main(){ int arr[] = {1,2,3,4,5}; int brr[] = {4,5,3,2,1}; int crr[] = {4,3,5,1,2}; cout<<IsPopOrder(arr,brr,sizeof(arr)/sizeof(arr[0]))<<endl; cout<<IsPopOrder(arr,crr,sizeof(arr)/sizeof(arr[0]))<<endl; return 0;}
阅读全文
0 0
- offer,栈的压入、弹出序列
- 【剑指offer】栈的压入弹出序列
- 剑指offer系列源码-栈的压入、弹出序列
- 剑指offer--栈的压入、弹出序列
- 剑指Offer之 - 栈的压入、弹出序列
- 剑指offer:栈的压入、弹出序列
- 《剑指offer》栈的压入、弹出序列
- 剑指Offer系列---(24)栈的压入、弹出序列
- 栈的压入、弹出序列(剑指offer)
- 剑指 offer:栈的压入、弹出序列
- 【剑指Offer】栈的压入、弹出序列
- 剑指offer—栈的压入、弹出序列
- 剑指offer:栈的压入弹出序列
- 剑指Offer-22-栈的压入、弹出序列
- 《剑指offer》——栈的压入、弹出序列
- 剑指offer:栈的压入、弹出序列
- 【剑指offer】之栈的压入弹出序列
- 剑指Offer:栈的压入、弹出序列(JAVA)
- java基础(九)之深入剖析线程同步Synchronized,Lock
- 关于对getchar一些小小的自学理解。。。
- 160个CrackMe之51
- c++ string中的reserve()和resize()
- Ubuntu安装anaconda,tensorflow,keras,pytorch
- 剑指offer--栈的压入、弹出序列
- MVP接口回调注册
- dpkg 被中断,您必须手工运行 sudo dpkg –configure -a解决此问题
- Idea中Git的使用和两种类型的冲突解决
- unity3d Unity协程(Coroutine)yield 表达式解释
- 笔试_公司(2)
- (M)DFS:129. Sum Root to Leaf Numbers
- PKU Helper 招新面试二
- 双精度有效位