如题。
原题可见这里
大致思路:
对照目标序列,查找驶来的火车车厢。相同就通过,不同则判断:
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"); } }
上面的逻辑有点乱。试试下面的:
思想: 栈里没有,且线上没有,就不可能。其余,操作就好。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现