• JAVA-栈-火车入站调整车厢顺序


    如题。

    原题可见这里

    大致思路:

    对照目标序列,查找驶来的火车车厢。相同就通过,不同则判断:

    1、栈(站)里第一节车厢是需要的,就出栈,继续查找下一列车厢

    2、栈里第一节车厢不是需要的,这节驶来的车厢就入站,判断下一节车厢。

    当驶来的列车判断完毕,而栈内还有列车,则说明不可能完成这种序列。

    代码:

    public static void main(String[] args) throws Exception
        {
            int[] a,b;
            Stack<Integer> mystack=new Stack<Integer>(); 
            a=new int[]{1,2,3,4,5,6,7,8,9};
            //b=new int[]{1,2,6,7,5,4,8,3,9};//yes
            //b=new int[]{1,3,5,4,7,2,6,8,9};//no
            b=new int[]{9,8,7,6,5,4,3,2,1};//yes
            for (int i = 0,p=0;i<b.length; i++,p++)
            {
                if(p>=a.length||b[i]!=a[p])//如果驶来列车判断完毕,或者驶来列车编号不合要求
                {
                    //则判断栈里列车情况    
                    if(!mystack.empty()&&mystack.peek()==b[i])//如果站里的列车符合要求,就出栈
                    {
                        mystack.pop();
                        p--;
                    }
                    else//否则
                    {
                        //如果已经没车来了
                        if(p>=a.length)
                        {
                            break;//结束
                        }
                        //否则驶来的列车入站
                        mystack.push(a[p]);
                        i--;
                    }
                }
            }
            //以上判断完毕之后
            //如果栈是空的,说明所有车厢都用上了,即可以实现。
            if(mystack.empty())
            {
                System.out.println("yes");
            }
            //否则,站里剩的就是用不上的车厢,即无法实现
            else
            {
                System.out.println("no");
            }
        }

     上面的逻辑有点乱。试试下面的:

     

    思想: 栈里没有,且线上没有,就不可能。其余,操作就好。

  • 相关阅读:
    算法系列:杂项
    算法系列:
    Algo: Dynamic programming
    Algo:
    算法系列:XXX
    算法系列:量子计算与量子通信
    算法系列:Reservoir Sampling
    算法系列:CSAPP 推荐
    算法系列:
    算法系列:geometry
  • 原文地址:https://www.cnblogs.com/wanjinliu/p/13920723.html
Copyright © 2020-2023  润新知