前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >判断栈的出栈顺序合法性

判断栈的出栈顺序合法性

作者头像
老白
发布2018-03-19 15:55:06
3K0
发布2018-03-19 15:55:06
举报
文章被收录于专栏:架构之路架构之路

栈的出栈顺序合法性是指给定一系列元素,如1 - N,按照从小到大的方式入栈,每个元素的出栈时机不定。题目给定一个出栈顺序,我们来判断这个出栈顺序有没有可能发生。

比如对[1,2,3,4,5,6,7,8,9]:

  • [1,2,3,4,5,6,7,8,9]是一个合法出栈序列
  • [9,8,7,6,5,4,3,2,1]也是一个合法序列
  • [4,5,3,2,7,6,1,8,9]也是一个合法序列
  • [3,4,5,1,2,9,8,7,6]就是一个非法序列

判断方法有两种,一种是对每一个值,其后所有小于它的值的数是一个降序排列。

另一种是模拟入栈和出栈,对出栈序列中每一个数值,如果它当前已经在栈顶,则出栈;如果不在,那么从入栈序列中取出下一个放入栈中;如果需要入栈时入栈序列已空,则这就是一个非法序列。


代码如下:

代码语言:javascript
复制
    public static boolean stackOrder(int[] nums){
        int[] origin=new int[]{1,2,3,4,5,6,7,8,9};
        //假定出栈序列也是1-9的数列
        Deque<Integer> q=new ArrayDeque<>();
        int index=0,i=0;
        for (i=0;i<nums.length;){
            if(!q.isEmpty()&& nums[i]==q.getLast()){
                q.pollLast();
                i++;
            }
            else {
                if(index<9) {
                    q.addLast(origin[index++]);
                }
                else break;
            }
        }
        return i==nums.length?true:false;
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-09-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码如下:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档