LeetCode - 155 - 最小栈(min-stack)

栏目: IT技术 · 发布时间: 5年前

内容简介:LeetCode - 155 - 最小栈(min-stack)

Create by jsliang on 2019-07-03 16:40:04
Recently revised in 2019-07-03 19:29:55

一 目录

不折腾的前端,和咸鱼有什么区别

| 目录 | | --- | | 一 目录 | | 二 前言 | | 三 解题 | | 四 执行测试 | | 五 LeetCode Submit | | 六 解题思路 |

二 前言

  • 难度:简单

  • 涉及知识:栈、设计

  • 题目地址:https://leetcode-cn.com/problems/min-stack/

  • 题目内容

  1. 设计一个支持 pushpoptop 操作,并能在常数时间内检索到最小元素的栈。

  2. push(x) -- 将元素 x 推入栈中。

  3. pop() -- 删除栈顶的元素。

  4. top() -- 获取栈顶元素。

  5. getMin() -- 检索栈中的最小元素。

  6. 示例:

  7. MinStack minStack = new MinStack();

  8. minStack.push(-2);

  9. minStack.push(0);

  10. minStack.push(-3);

  11. minStack.getMin(); --> 返回 -3.

  12. minStack.pop();

  13. minStack.top(); --> 返回 0.

  14. minStack.getMin(); --> 返回 -2.

三 解题

小伙伴可以先自己在本地尝试解题,再回来看看 jsliang 的解题思路。

  • 解题代码

  1. var MinStack = function () {

  2. this.stack = [];

  3. this.min = null;

  4. };

  5. MinStack.prototype.push = function (x) {

  6. this.stack.push(x);

  7. if (this.min === null) {

  8. this.min = x;

  9. } else {

  10. this.min = Math.min(this.min, x);

  11. }

  12. };

  13. MinStack.prototype.pop = function () {

  14. this.stack.pop();

  15. this.min = this.stack.length ? this.stack.reduce((min, num) => Math.min(min, num), Infinity) : null;

  16. };

  17. MinStack.prototype.top = function () {

  18. if (!this.stack.length) {

  19. return null;

  20. }

  21. return this.stack[this.stack.length - 1];

  22. };

  23. MinStack.prototype.getMin = function () {

  24. return this.min;

  25. };

四 执行测试

  1. let minStack = new MinStack();

  2. minStack.push(-2);

  3. minStack.push(0);

  4. minStack.push(-3);

  5. let nowMin = minStack.getMin();

  6. console.log('现在最小:' + nowMin);

  7. minStack.pop();

  8. let nowTop = minStack.top();

  9. console.log('现在顶部:' + nowTop);

  10. let newMin = minStack.getMin();

  11. console.log(minStack);

  12. console.log('现在最小:' + newMin);

五 LeetCode Submit

  1. Accepted

  2. 18/18 cases passed (148 ms)

  3. Your runtime beats 97.72 % of javascript submissions

  4. Your memory usage beats 48.3 % of javascript submissions (44.2 MB)

六 解题思路

首先,上手直接开撸:

  1. var MinStack = function() {

  2. this.stack = [];

  3. };

  4. MinStack.prototype.push = function(x) {

  5. this.stack.push(x);

  6. };

  7. MinStack.prototype.pop = function() {

  8. this.stack.pop();

  9. };

  10. MinStack.prototype.top = function() {

  11. if (!this.stack.length) {

  12. return null;

  13. }

  14. return this.stack[this.stack.length - 1];

  15. };

  16. MinStack.prototype.getMin = function() {

  17. return this.stack.slice().sort((a, b) => a - b)[0];

  18. };

一开始我的思路是这样的,然后 LeetCode 提交返回:

  1. Time Limit Exceeded

  2. 17/18 cases passed (N/A)

  3. testcase: '["MinStack","push","push",……]'

  4. answer:

  5. expected_answer:

  6. stdout:

好家伙,超时限制!!!

接着,发现它还会提出 JS 最大值超范围的数字,范围限制!!!

最后,感觉不太耐烦了,直接找大佬的代码了。

有的小伙伴说我没有讲解每句话的意思,其实这道题总体来说没有任何难点


不折腾的前端,和咸鱼有什么区别!

LeetCode - 155 - 最小栈(min-stack)

jsliang 会每天更新一道 LeetCode 题解,从而帮助小伙伴们夯实原生 JS 基础,了解与学习算法与数据结构。

扫描上方二维码,关注 jsliang 的公众号,让我们一起折腾!

LeetCode - 155 - 最小栈(min-stack)
jsliang 的文档库 由 梁峻荣 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
基于https://github.com/LiangJunrong/document-library上的作品创作。
本许可协议授权之外的使用权限可以从 https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ 处获得。


以上所述就是小编给大家介绍的《LeetCode - 155 - 最小栈(min-stack)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

图论导引

图论导引

[美] Douglas B.West / 机械工业出版社 / 2004-10 / 59.00元

图论在计算科学、社会科学和自然科学等各个领域都有广泛应用。本书是本科生或研究生一学期或两学期的图论课程教材。全书力求保持按证明的难度和算法的复杂性循序渐进的风格,使学生能够深入理解书中的内容。书中包括对证明技巧的讨论、1200多道习题、400多幅插图以及许多例题,而且对所有定理都给出了详细完整的证明。虽然本书包括许多算法和应用,但是重点在于理解图论结构和分析图论问题的技巧。一起来看看 《图论导引》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具