万金流
以码会友。 吾Q:578751655。 水平有限,轻喷,谢!
随笔 - 189,  文章 - 0,  评论 - 7,  阅读 - 14万

如题。

原题可见这里

大致思路:

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

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   万金流  阅读(350)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现

点击右上角即可分享
微信分享提示