面试题22:栈的压入、弹出序列
2015-09-23 14:57
267 查看
题目描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。题目分析
剑指Offer(纪念版)P134代码实现
bool IsPopOrder(const int* pPush, const int* pPop, int nLength) { bool bPossible = false; if(pPush != NULL && pPop != NULL && nLength > 0) { const int* pNextPush = pPush; const int* pNextPop = pPop; std::stack<int> stackData; while(pNextPop - pPop < nLength) { // 当辅助栈的栈顶元素不是要弹出的元素 // 先压入一些数字入栈 while(stackData.empty() || stackData.top() != *pNextPop) { // 如果所有数字都压入辅助栈了,退出循环 if(pNextPush - pPush == nLength) break; stackData.push(*pNextPush); pNextPush ++; } if(stackData.top() != *pNextPop) break; stackData.pop(); pNextPop ++; } if(stackData.empty() && pNextPop - pPop == nLength) bPossible = true; } return bPossible; }
相关文章推荐
- Java程序员应该遵守的10条纪律
- 面试题21:包含min函数的栈
- google面试题
- 面试题19:二叉树的镜像
- java基础知识强化51:Java程序员面试失败的5大原因
- 程序员与哲学家
- 面试题18:树的子结构
- 生活-MBTI职业性格测试
- 黑马程序员——多线程
- 面试题17:合并两个排序的链表
- 面试题16:反转链表
- 低效程序员的7个坏习惯-兄弟连IT教育
- 面试题15:链表中倒数第k个结点
- 面试答疑
- 如何成为程序员高手(转)
- 面试心得与总结---BAT、网易、蘑菇街
- 程序员迷茫的感情生活
- MySQL DBA 面试全揭秘
- 面试心得与总结---BAT、网易、蘑菇街
- ArrowDownloadButton 分享