栈-铁轨-Java

问题描述:某城市有一个火车站。铁轨铺设如图所示。有N节车厢从A方向驶入车站,按进站顺序编号为1~n。你的任务是让他们按照某种特定的顺序进入B方向的铁轨并驶出车站。为了重组车厢,可以借助中转站C,对于每个车,一旦进入c就不能再进入A,一旦c进入B就不能回到c。

测试数据

  输入样例:

    5
    5 4 3 2 1

    6
    6 5 4 3 2 1

    5
    5 4 1 2 3

  输出样例:

    Yes

    Yes

    No

import java.util.Scanner;
import java.util.Stack;
/**
 * 铁轨
 * @author NEU-2015
 *
 */
public class Demo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int x;
        int[] array;
        Stack<Integer> stack = new Stack<Integer>();
        boolean flag;
        int a;
        int b;
        while(input.hasNext()) {
            flag = true;
            b = 1;
            a = 1;
            x = input.nextInt();
            array = new int[x];
            for(int i = 0; i < x; i++) {
                array[i] = input.nextInt();
            }

            //关键部分
            while(a <= x) {
                if(array[a-1] == b) {     //1.进队 与 出队 相等
                    a++;
                    b++;
                } else if(!stack.empty() && stack.peek() == array[a-1]) { //2.进队 与 出队 不相等 但是 中间栈顶元素 与 出队 元素相等
                    stack.pop();
                    a++;
                } else if(b <= x) {  //3.进队 与 出队不相等 栈顶 与 出队 不相等 将进队元素压栈
                    stack.push(b++);
                } else {             //4.不可能出现输入中 的结果  结束循环
                    flag = false;
                    break;
                }
            }

            if(!flag) {
                System.out.println("No");
            } else {
                System.out.println("Yes");
            }
        }
    }
}
时间: 2024-10-25 21:57:48

栈-铁轨-Java的相关文章

栈的Java实现--链栈

栈的Java实现--链栈 链栈,顾名思义,就是以链表的形式实现的栈的相关操作,其实是功能弱化了的链表,如果已经阅读过链表的实现代码,那么链栈的实现显得更为容易. 链栈的基本结构: 链栈的入栈操作: 让top引用指向新的节点,新节点的next指向原来的top 记录栈内元素个数的size+1 链栈的出栈操作: top引用指向原栈顶元素的下一个元素(top.next),并释放原栈顶元素的引用 记录栈内元素个数的size-1 链栈的Java实现代码: package com.liuhao.DataStr

两个栈实现一个队列以及两个队列实现一个栈(Java)

两个栈实现一个队列 import java.util.Stack; public class Demo07 { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { stack1.push(node); } public int pop() { if(stack2.size

“全栈2019”Java第一章:安装JDK11(Mac)

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 文章原文链接 "全栈2019"Java第一章:安装JDK11(Mac) 下一章 "全栈2019"Java第二章:安装JDK11(Windows) 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组". 全栈工程师学习计划 关

“全栈2019”Java第五章:IntelliJ IDEA代码自动提示

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第五章:IntelliJ IDEA代码自动提示 下一章 "全栈2019"Java第六章:注释 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组&quo

“全栈2019”Java第七章:IntelliJ IDEA注释快捷键

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第七章:IntelliJ IDEA注释快捷键 下一章 "全栈2019"Java第八章:IntelliJ IDEA设置注释不显示在行首 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,

“全栈2019”Java第八章:IntelliJ IDEA设置注释不显示在行首

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第八章:IntelliJ IDEA设置注释不显示在行首 下一章 "全栈2019"Java第九章:解释第一个程序 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Jav

“全栈2019”Java第九章:解释第一个程序

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第九章:解释第一个程序 下一章 "全栈2019"Java第十章:关键字 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组". 全栈工程师学习

“全栈2019”Java第十章:关键字

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第十章:关键字 下一章 "全栈2019"Java第十一章:标识符 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组". 全栈工程师学习计划

“全栈2019”Java第十六章:下划线在数字中的意义

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第十六章:下划线在数字中的意义 下一章 "全栈2019"Java第十七章:赋值运算符和算术运算符 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组&q