剑指Offer——包含min函数的栈(JS实现) |刷题打卡

简介: 剑指Offer——包含min函数的栈(JS实现) |刷题打卡

前言

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

题目描述

image.png

解题思路

  • 这道题属于栈的相关问题
  • 本题的核心思路是采用模拟栈的方法
  • 模拟栈是一种很重要的思路,主要是定义两个数组,一个数组和真实的栈的pushpop方法一致,另一个数组则是用来存储最小值的栈,只有push的元素比最小值栈小或相等的时候,才将该元素push进最小值栈。
  • top方法只需将真实栈的栈顶元素返回即可
  • 在进行pop方法的时候,真实栈直接pop即可,最小值栈则要判断是否pop的是自己的栈顶,是则pop,不是则不用pop

解题代码

var MinStack = function () {
    this.stack = [];
    this.minStack = [];
};
MinStack.prototype.push = function (x) {
    this.stack.push(x);
    if (this.minStack.length === 0 || x <= this.minStack[this.minStack.length - 1]) {
        this.minStack.push(x);
    }
};
MinStack.prototype.pop = function () {
    if (this.stack[this.stack.length - 1] === this.minStack[this.minStack.length - 1]) {
        this.minStack.pop();
        this.stack.pop();
    } else {
        this.stack.pop();
    }
};
MinStack.prototype.top = function () {
    return this.stack[this.stack.length - 1];
};
MinStack.prototype.min = function () {
    return this.minStack[this.minStack.length - 1];
};

总结(本题给我们的启示思路)

  • 启示一:学会使用模拟栈
  • 启示二:模拟min栈什么时候进行push,什么时候进行pop是本题的核心和关键
相关文章
|
20天前
|
JavaScript
变量和函数提升(js的问题)
变量和函数提升(js的问题)
|
20天前
|
JavaScript
常见函数的4种类型(js的问题)
常见函数的4种类型(js的问题)
11 0
|
20天前
|
JavaScript
写一个函数将N组<>(包含开始和结束),进行组合,并输出组合结果 (js)
写一个函数将N组<>(包含开始和结束),进行组合,并输出组合结果 (js)
9 0
|
1月前
|
自然语言处理 JavaScript 网络架构
js开发:请解释什么是ES6的箭头函数,以及它与传统函数的区别。
ES6的箭头函数以`=&gt;`定义,简化了函数写法,具有简洁语法和词法作用域的`this`。它无`arguments`对象,不能用作构造函数,不支持`Generator`,且不改变`this`、`super`、`new.target`绑定。适用于简短表达式,常用于异步编程和高阶函数。
17 5
|
1月前
|
JavaScript 前端开发 网络架构
JavaScript 谈谈对箭头函数的理解及其与普通函数的区别。
JavaScript 谈谈对箭头函数的理解及其与普通函数的区别。
17 1
|
1月前
|
前端开发 JavaScript 数据处理
在JavaScript中,什么是异步函数执行的例子
在JavaScript中,什么是异步函数执行的例子
10 0
|
7天前
|
缓存 JavaScript 前端开发
js的入口函数,入口函数的作用
js的入口函数,入口函数的作用
12 4
|
22天前
|
存储 前端开发 JavaScript
JavaScript如何封装一些常见的函数来提高工作效率
通过封装这些常见函数,你可以在项目中重复使用,提高代码的复用性和工作效率。这些函数包括获取元素、发起Ajax请求、处理本地存储、日期格式化、定时器等功能,可以在不同场景中减少重复的代码编写。
7 0
JavaScript如何封装一些常见的函数来提高工作效率
|
30天前
|
JavaScript
js开发:请解释什么是ES6的Generator函数,以及它的用途。
ES6的Generator函数是暂停恢复的特殊函数,用yield返回多个值,适用于异步编程和流处理,解决了回调地狱问题。
16 6
|
1月前
|
JSON JavaScript 前端开发
JavaScript随手笔记---数组中相同的元素进行分组(数据聚合) groupBy函数
JavaScript随手笔记---数组中相同的元素进行分组(数据聚合) groupBy函数