LeetCode算法栈—验证图书取出顺序

验证图书取出顺序

目录

验证图书取出顺序

题解:

代码:

运行结果:


验证图书取出顺序

现在图书馆有一堆图书需要放入书架,并且图书馆的书架是一种特殊的数据结构,只能按照 一定 的顺序 放入拿取 书籍。

给定一个表示图书放入顺序的整数序列 putIn,请判断序列 takeOut 是否为按照正确的顺序拿取书籍的操作序列。你可以假设放入书架的所有书籍编号都不相同。

示例 1:

复制代码
输入:putIn = [6,7,8,9,10,11], takeOut = [9,11,10,8,7,6]
输出:true
解释:我们可以按以下操作放入并拿取书籍:
push(6), push(7), push(8), push(9), pop() -> 9,
push(10), push(11),pop() -> 11,pop() -> 10, pop() -> 8, pop() -> 7, pop() -> 6

示例 2:

复制代码
输入:putIn = [6,7,8,9,10,11], takeOut = [11,9,8,10,6,7]
输出:false
解释:6 不能在 7 之前取出。

提示:

  • 0 <= putIn.length == takeOut.length <= 1000
  • 0 <= putIn[i], takeOut < 1000
  • putIntakeOut 的排列。

题解:

  • 首先,创建一个 Stack 对象 stack,用于模拟存储书籍的入栈顺序。
  • 然后,使用一个整型变量 i=0 来标识 takeOut 数组的下标
  • 接下来,通过遍历 putIn 数组中的每个元素 num,将其入栈 stack.push(num)
  • 然后,使用一个循环判断栈顶元素和当前 takeOut 数组的元素 takeOut[i] 是否相等如果相等,则说明可以从栈中取出对应的书籍,并且 i 增加一位,继续判断下一个 takeOut 元素与栈顶元素是否相等。直到栈为空或者栈顶元素与当前 takeOut 元素不相等,跳出循环
  • 最后,返回 stack.isEmpty() 的结果,如果栈为空则表示所有书籍都被正确地取出,返回 true,否则返回 false 表示取出顺序不合法。

代码:

java 复制代码
class Solution {
    public boolean validateBookSequences(int[] putIn, int[] takeOut) {
        // 模拟存储putIn入栈,方便与takeOut对比
        Stack<Integer> stack =new Stack<>();
        // 标识takeOut下标
        int i=0;
        for(int num : putIn){
            stack.push(num);
            // 循环判断栈顶元素是否为takeOut当前元素
            while(!stack.isEmpty()&&stack.peek()==takeOut[i]){
                stack.pop();
                i++;
            }
        }
        return stack.isEmpty();
    }
}

运行结果:

相关推荐
杨章隐18 小时前
Java 解析 CDR 文件并计算图形面积的完整方案(支持 MultipartFile / 网络文件)@杨宁山
java·开发语言
千金裘换酒18 小时前
LeetCode 删除链表的倒数第N个结点
算法·leetcode
Renhao-Wan18 小时前
Java 并发基石:AQS (AbstractQueuedSynchronizer)
java·开发语言
SweetCode19 小时前
【无标题】
开发语言·c++·算法
shughui19 小时前
Python基础面试题:语言定位+数据类型+核心操作+算法实战(含代码实例)
开发语言·python·算法
王老师青少年编程19 小时前
信奥赛C++提高组csp-s之拓扑排序详解
c++·算法·拓扑排序·csp·信奥赛·csp-s·提高组
zlp199219 小时前
xxl-job java.sql.SQLException: interrupt问题排查(二)
java·开发语言
sunnyday042619 小时前
深入理解Java日志框架:Logback与Log4j2配置对比分析
java·log4j·logback
浩瀚地学19 小时前
【Java】异常
java·开发语言·经验分享·笔记·学习
kaikaile199519 小时前
matlab计算流场
人工智能·算法·matlab