【Go 算法】最小栈

367 阅读2分钟

我正在参加「掘金·启航计划」,这是我的第 1 篇文章。

他来了,9 月算法第 2 篇,继续肝 “栈”相关。初衷:结合 Go 刷刷算法题目,提升算法水平的同时复习一下 Go 基础。 题外话:最近大厂裁员的消息很多,整个行情非常的低迷,我们要从现在开始准备起来!GO

放低心态、认真学习,机会总是留给不断努力的自己

题目描述

leedcode:155.最小栈

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

实现 MinStack 类:

  • MinStack() 初始化堆栈对象。
  • void push(int val) 将元素val推入堆栈。
  • void pop() 删除堆栈顶部的元素。
  • int top() 获取堆栈顶部的元素。
  • int getMin() 获取堆栈中的最小元素。

样例1:

输入:
["MinStack","push","push","push","getMin","pop","top","getMin"]
[[],[-2],[0],[-3],[],[],[],[]]

输出:
[null,null,null,null,-3,null,0,-2]

解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.

提示:

  • -231 <= val <= 231 - 1
  • pop、top 和 getMin 操作总是在 非空栈 上调用
  • push, pop, top, and getMin最多被调用 3 * 104 次

解题思路分析

使用 2 个栈

  • Stack 栈中存储所有的元素,保证在 top 操作是栈顶保持正确的元素返回
  • MinStack 栈中存放最小的元素,每次调用 GetMin 取出栈顶元素就是所有元素中最小的数
  • 每次 Push 压栈时,Stack 正常入栈,判断 MinStack 如果比栈顶的小,则 Push 进入到 MinStack 中,否则不操作 push。
  • 每次 Pop 时,Stack & MinStack 正常出栈

AC 提交

image.png

结果

最小栈.png

总结

本道题是一个很经典的栈实现题。要求实现一个栈的类,实现 push()、pop()、top()、getMin()。

最后

感谢阅读,欢迎点赞、关注、评论,持续更新中。