老卫带你学---leetcode刷题(155. 最小栈)

155. 最小栈

问题:

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

实现 MinStack 类:

MinStack() 初始化堆栈对象。

void push(int val) 将元素val推入堆栈。

void pop() 删除堆栈顶部的元素。

int top() 获取堆栈顶部的元素。

int getMin() 获取堆栈中的最小元素。

bash 复制代码
示例 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.
minStack.getMin();   --> 返回 -2.
bash 复制代码
提示:

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

解决:

核心在于取得最小

那只需要在push的时候,也维护当前栈最小元素信息即可

python 复制代码
class MinStack:

    def __init__(self):
      self.stack = []

    def push(self, val: int) -> None:
      if not self.stack:
        self.stack.append([val,val])
      else:
        self.stack.append([val,min(val,self.stack[-1][1])])

    def pop(self) -> None:
      self.stack.pop()

    def top(self) -> int:
      return self.stack[-1][0]

    def getMin(self) -> int:
      return self.stack[-1][1]
相关推荐
雪花desu7 分钟前
【Hot100-Java简单】:两数之和 (Two Sum) —— 从暴力枚举到哈希表的思维跃迁
java·数据结构·算法·leetcode·哈希表
YGGP8 分钟前
【Golang】LeetCode 121. 买卖股票的最佳时机
算法·leetcode
YGGP26 分钟前
【Golang】LeetCode 45. 跳跃游戏 II
算法·leetcode·游戏
YGGP32 分钟前
【Golang】LeetCode 763. 划分字母区间
算法·leetcode
YGGP43 分钟前
【Golang】LeetCode 1143. 最长公共子序列
算法·leetcode
Swift社区1 小时前
LeetCode 459 - 重复的子字符串
算法·leetcode·职场和发展
小李小李快乐不已1 小时前
动态规划理论基础
数据结构·c++·算法·leetcode·动态规划
圣保罗的大教堂1 小时前
leetcode 1351. 统计有序矩阵中的负数 简单
leetcode
Tisfy1 小时前
LeetCode 1351.统计有序矩阵中的负数:O(m+n)时间复杂度——抽象题解
算法·leetcode·矩阵·题解·遍历
小李小李快乐不已1 小时前
算法技巧理论基础
数据结构·c++·算法·leetcode·hot100