剑指Offer——栈的压入、弹出序列(JS实现) |刷题打卡

简介: 剑指Offer——栈的压入、弹出序列(JS实现) |刷题打卡

前言

掘金团队号上线,助你 Offer 临门! 点击 查看详情

题目描述

image.png

解题思路

  • 本题的思想在于想到模拟栈
  • 我们首先定义一个数组用来模拟栈
  • 从pushed数组的第一个元素开始进行入栈,如果该元素在popped数组的第一个元素,我们就将入栈的元素出栈,然后继续判断栈顶元素是否和popped数组指针指向的元素相同,相同则出栈。
  • 如果最后模拟栈的元素个数为零,则说明是栈的压入和弹出序列,反之则不是。

解题代码

var validateStackSequences = function (pushed, popped) {
    // 本题使用模拟栈的写法
    const stack = [];
    // 定义一个指向popped元素的指针
    let pointer = 0;
    for (let i = 0; i < pushed.length; i++) {
        stack.push(pushed[i]);
        if (popped[pointer] === pushed[i]) {
            stack.pop();
            pointer++;
        }
        if (pointer === popped.length) break;
        while (stack[stack.length-1] === popped[pointer]) {
            stack.pop();
            pointer++;
            if (pointer === popped.length) return true;
        }
    }
    while (stack.length !== 0) {
        if(stack[stack.length - 1] === popped[pointer]) {
            stack.pop();
            pointer++;
        } else {
            return false;
        }  
    }
    return true;
};

总结

  • 本题属于栈类型的问题。
  • 核心思路在于想到模拟栈的压入和弹出去对比popped的指针指向的元素,最后通过判断栈是否为空,来判断是否属于栈的压入和弹出。
相关文章
|
3月前
|
存储 JSON JavaScript
「offer来了」保姆级巩固你的js知识体系(4.0w字)
该文章提供了JavaScript知识体系的全面复习资料,覆盖了从基础语法到高级特性如闭包、原型链、异步编程等多个方面,并通过大量的面试题和实例代码帮助巩固理解。
「offer来了」保姆级巩固你的js知识体系(4.0w字)
|
3月前
|
JavaScript 前端开发
JavaScript写的序列代码生成器
JavaScript写的序列代码生成器
|
5月前
|
JavaScript 前端开发 算法
前端 JS 经典:最长递增子序列
前端 JS 经典:最长递增子序列
53 2
|
6月前
|
存储 JavaScript 前端开发
JavaScript中的数组是核心数据结构,用于存储和操作序列数据
【6月更文挑战第22天】JavaScript中的数组是核心数据结构,用于存储和操作序列数据。创建数组可以使用字面量`[]`或`new Array()`。访问元素通过索引,如`myArray[0]`,修改同样如此。常见方法包括:`push()`添加元素至末尾,`pop()`移除末尾元素,`shift()`移除首元素,`unshift()`添加到开头,`join()`连接为字符串,`slice()`提取子数组,`splice()`进行删除、替换,`indexOf()`查找元素位置,`sort()`排序数组。还有其他如`reverse()`、`concat()`等方法。
133 2
|
5月前
|
JavaScript
数据结构(用 JS 实现栈和队列【三种方式】)
数据结构(用 JS 实现栈和队列【三种方式】)
69 0
|
5月前
|
存储 JavaScript 前端开发
javascript的栈内存 VS 堆内存(浅拷贝 VS 深拷贝)
javascript的栈内存 VS 堆内存(浅拷贝 VS 深拷贝)
33 0
|
7月前
|
JavaScript Java 测试技术
基于微信小程序的刷题系统的+springboot+vue.js附带文章和源代码设计说明文档ppt
基于微信小程序的刷题系统的+springboot+vue.js附带文章和源代码设计说明文档ppt
65 1
|
7月前
|
存储 前端开发 JavaScript
【Web 前端】JS中的栈和堆是什么?优缺点?
【4月更文挑战第22天】【Web 前端】JS中的栈和堆是什么?优缺点?
|
7月前
|
前端开发 JavaScript 算法
JavaScript 中实现常见数据结构:栈、队列与树
JavaScript 中实现常见数据结构:栈、队列与树
|
7月前
|
JavaScript 前端开发
剑指 Offer 31. 栈的压入、弹出序列 (javascript实现)
剑指 Offer 31. 栈的压入、弹出序列 (javascript实现)