万金流
以码会友。 吾Q:578751655。 水平有限,轻喷,谢!

如题。

原题可见这里

大致思路:

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

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");
        }
    }

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

 

 

 

 

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

posted on 2020-11-03 15:55  万金流  阅读(345)  评论(0编辑  收藏  举报