LeetCode 面试题 03.02. 栈的最小值

文章目录

一、题目

请设计一个栈,除了常规栈支持的 poppush 函数以外,还支持 min 函数,该函数返回栈元素中的最小值。执行 pushpopmin 操作的时间复杂度必须为 O(1)

点击此处跳转题目

示例:

MinStack minStack = new MinStack();

minStack.push(-2);

minStack.push(0);

minStack.push(-3);

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

minStack.pop();

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

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

二、C# 题解

要实现 O(1) 复杂度的 min 函数,只需多使用一个数组记录最小值即可:

csharp 复制代码
public class MinStack {
    private List<int> data; // 存放栈数据
    private List<int> mins; // 存放对应栈的最小值

    private int p;          // 栈顶指针

    /** initialize your data structure here. */
    public MinStack() {
        data = new List<int>(128);
        mins = new List<int>(128);
        p = -1;
    }
    
    public void Push(int x) {
        data.Add(x);
        if (p == -1) mins.Add(x);
        else mins.Add(x < mins[p] ? x : mins[p]); // 比较 x 与 min,放入更小的一个
        p++;
    }
    
    public void Pop() {
        if (p == -1) return;
        data.RemoveAt(p);
        mins.RemoveAt(p);
        p--;
    }
    
    public int Top() {
        return data[p];
    }
    
    public int GetMin() {
        return mins[p];
    }
}

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.Push(x);
 * obj.Pop();
 * int param_3 = obj.Top();
 * int param_4 = obj.GetMin();
 */
  • 时间复杂度: O ( n ) O(n) O(n)。
  • 空间复杂度: O ( 1 ) O(1) O(1)。
相关推荐
天天爱吃肉821810 小时前
【跨界封神|周杰伦×王传福(陶晶莹主持):音乐创作与新能源NVH测试,底层逻辑竟完全同源!(新人必看入行指南)】
python·嵌入式硬件·算法·汽车
im_AMBER10 小时前
Leetcode 114 链表中的下一个更大节点 | 删除排序链表中的重复元素 II
算法·leetcode
xhbaitxl11 小时前
算法学习day38-动态规划
学习·算法·动态规划
多恩Stone11 小时前
【3D AICG 系列-6】OmniPart 训练流程梳理
人工智能·pytorch·算法·3d·aigc
历程里程碑11 小时前
普通数组----轮转数组
java·数据结构·c++·算法·spring·leetcode·eclipse
pp起床11 小时前
贪心算法 | part02
算法·leetcode·贪心算法
sin_hielo11 小时前
leetcode 1653
数据结构·算法·leetcode
2501_9011478311 小时前
面试必看:优势洗牌
笔记·学习·算法·面试·职场和发展
YuTaoShao11 小时前
【LeetCode 每日一题】3634. 使数组平衡的最少移除数目——(解法二)排序 + 二分查找
数据结构·算法·leetcode
wangluoqi11 小时前
26.2.6练习总结
数据结构·算法