LeetCode[中等] 155. 最小栈

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

实现 MinStack 类:

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

思路:

若栈中元素为 b c d,a进栈,则只要a在栈中,b c d 就一定在栈中(a出栈之前,b c d 一定不会出栈),因此,a为栈顶一定对应一个最小元素

利用辅助栈,将元素栈同步插入与删除,用于存储与每个元素对应的最小值:

  • 栈顶存储栈内最小元素
  • 新元素入栈时,将当前辅助栈的栈顶存储的最小值 与 当前元素进行比较,从而更新栈顶最小值
cs 复制代码
public class MinStack {
    Stack<int> stack;
    Stack<int> minStack;
    public MinStack() {
        stack = new Stack<int>();
        minStack = new Stack<int>();
    }
    
    public void Push(int val) {
        stack.Push(val);
        if (minStack.Count > 0 && val > minStack.Peek()) {
            minStack.Push(minStack.Peek());
        }
        else
            minStack.Push(val);
        
    }
    
    public void Pop() {
        stack.Pop();
        minStack.Pop();
    }
    
    public int Top() {
        return stack.Peek();
    }
    
    public int GetMin() {
        return minStack.Peek();
    }
}

复杂度分析

  • 时间复杂度:构造方法和每一项操作的时间复杂度都是 O(1)。
  • 空间复杂度:O(n),其中 n 是元素个数。空间复杂度主要取决于栈空间,常规栈和最小元素栈的空间都是 O(n)。
相关推荐
吴声子夜歌1 天前
Java——接口的细节
java·开发语言·算法
myheartgo-on1 天前
Java—方 法
java·开发语言·算法·青少年编程
宝贝儿好1 天前
【LLM】第三章:项目实操案例:智能输入法项目
人工智能·python·深度学习·算法·机器人
雪碧聊技术1 天前
上午题_算法
算法·软考·软件设计师
naturerun1 天前
从数组中删除元素的算法
数据结构·c++·算法
he___H1 天前
接雨水----解
leetcode
斯内科1 天前
四胞胎素数:找出‌个位数分别是 1、3、7、9‌,且‌十位及更高位数字完全相同‌的质数,例如 11、13、17、19
算法·质数·素数·四胞胎素数
Hello.Reader1 天前
算法基础(十二)——主方法:快速求解常见递归式
算法
香蕉鼠片1 天前
面试过程中被问懵
面试·职场和发展