剑指offer_栈和队列---栈的压入,弹出序列
来源:互联网 发布:淘宝怎样用花呗付款 编辑:程序博客网 时间:2024/06/07 01:54
题目描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
解题思路
1,按照顺序持续入栈,直到发现和出栈第一个元素相同的为止,弹出,接着判断
2,这时候就有两种情况,第一种就是//1,2,3,4,5和3,2,1,4,5这种情况弹完3,弹之前的 ,然后之后的入栈再弹。第二种情况是 //1,2,3,4,5和3,4,5,1,2这种情况,弹完3,入栈之后的,弹出,再弹之前的。总结起来就是逐个比较即可,当前没有接着入栈,如果到最后栈还没弹完,说明该弹出序列不是该压入序列的正确弹出。
代码实现
/** * */package 栈和队列;import java.util.Stack;/** * <p> * Title:IsPopOrder * </p> * <p> * Description: * </p> * * @author 田茂林 * @data 2017年8月22日 上午11:03:06 */public class IsPopOrder { Stack<Integer> stack = new Stack<Integer>(); public boolean isPopOrder(int[] pushA, int[] popA) { if (pushA == null || popA == null || pushA.length < 1 || popA.length < 1) { return false;// 非空判断 } int index = 0; for (int i = 0; i < pushA.length; i++) { stack.push(pushA[i]); //1,2,3,4,5和3,4,5,1,2这种情况 while(!stack.isEmpty()&& stack.peek() == popA[index]) { //1,2,3,4,5和3,2,1,4,5这种情况 stack.pop(); index++; } } return stack.isEmpty(); //如果全部正常弹出,则为真,按照该序列,栈并没有弹出到空为止则不是 }}
阅读全文
0 0
- 剑指offer_栈和队列---栈的压入,弹出序列
- 剑指offer_面试题22_栈的压入、弹出序列(总结规律)
- 剑指Offer_面试题22_栈的压入弹出序列
- 【栈和队列3】 栈的压入、弹出序列
- 栈的压入和弹出序列
- 栈的压入和弹出序列
- 栈的压入和弹出序列
- 栈的压入和弹出序列
- 剑指-栈的压入和弹出序列
- 剑指Offer---栈的压入和弹出序列
- 栈的压入和弹出测试(测试队列)
- 栈------栈的压入和弹出序列
- 22.栈的压入和弹出序列
- 1366栈的压入弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- 栈的压入、弹出序列
- Q22:栈的压入、弹出序列
- Python学习(从Web抓取信息)
- opencv3的学习
- lua repeat until 先statement 后执行判断
- 样式之王css3简单介绍
- java字符串
- 剑指offer_栈和队列---栈的压入,弹出序列
- PHP知识细节
- ERROR 1062 (23000): ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1'
- ajax动态赋值highcharts柱形图
- Android进阶#(6/12)让程序更优的技术——性能优化_内存泄漏
- android断点续传多线程下载
- 网络栈主要结构介绍(socket、sock、sk_buff,etc)
- 赢在面试之Java集合框架篇
- 一位资深程序员大牛给予Java初学者的学习路线建议