【LeetCode每日一题】剑指 Offer 30. 包含min函数的栈(持续更新)

简介: 【LeetCode每日一题】剑指 Offer 30. 包含min函数的栈(持续更新)

今日题目(剑指Offer系列)

剑指 Offer 30. 包含min函数的栈

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,
调用 min、push 及 pop 的时间复杂度都是 O(1)。

示例:

示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.min();   --> 返回 -2.

解题思路:

>本道题考的是栈的使用,
>题目中要求各个函数的复杂度为O(1)
>push和pop可以满足,而min就不太行
>所以我们需要用另外一个栈来进行保存当前栈的最小元素
>为什么用栈存呢?
>因为原来的栈需要不断添加或者弹出元素
>又因为栈具有先进后出的特性
>所以可以保存与原来的栈具有实时的交互,栈顶总是当前栈的最小值

Python解法:

class MinStack:
    def __init__(self):
        """
        initialize your data structure here.
        """
        self.A,self.B=[],[]
    def push(self, x: int) -> None:
        self.A.append(x)
        if not self.B or x<=self.B[-1]:
            self.B.append(x)
    def pop(self) -> None:
        if self.A[-1]==self.B[-1]:
            self.B.pop()
        self.A.pop()
    def top(self) -> int:
        return self.A[-1]
    def min(self) -> int:
        return self.B[-1]

Java解法:

class MinStack {
    Stack<Integer> A,B;
    /** initialize your data structure here. */
    public MinStack() {
        A=new Stack<>();
        B=new Stack<>();
    }
    public void push(int x) {
        A.push(x);
        if(B.empty()||x<=B.peek()){
            B.push(x);
        }
    }
    public void pop() {
        if(A.peek().equals(B.peek())){
            B.pop();
        }
        A.pop();
    }
    public int top() {
        return A.peek();
    }
    public int min() {
        return B.peek();
    }
}


目录
相关文章
LeetCode 热题100——单调栈
LeetCode 热题100——单调栈
19 0
|
2月前
|
Go C++
【力扣】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
【2月更文挑战第18天】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
34 6
|
4月前
【Leetcode 2487】从链表中移除节点 —— 单调栈
解题思路:维持一个单调递增栈,当栈为空时,记录当前节点为头节点;否则当前节点为栈顶节点的后继节点
|
4月前
【Leetcode 1944】队列中可以看到的人数 —— 单调栈
解题思路:维持一个单调递增栈来辅助计算每个人能够看到的人数。从右往左遍历数组,对于每个人,我们将其身高与栈顶元素的身高进行比较。如果当前人的身高比栈顶元素的身高高,则栈顶元素无法被当前人看到,将其出栈,并累计计数
|
4月前
|
存储
leetcode:232. 用栈实现队列
leetcode:232. 用栈实现队列
19 0
LeetCode | 232. 用栈实现队列
LeetCode | 232. 用栈实现队列
|
16天前
|
算法 DataX
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
|
17天前
|
算法 定位技术
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
17 0
|
2月前
|
算法 安全 Java
【数据结构与算法】6、栈(Stack)的实现、LeetCode:有效的括号
【数据结构与算法】6、栈(Stack)的实现、LeetCode:有效的括号
22 0
|
4月前
|
容器
代码随想录 Day49 单调栈01 LeetCode LeetCodeT739每日温度 T496 下一个最大元素I
代码随想录 Day49 单调栈01 LeetCode LeetCodeT739每日温度 T496 下一个最大元素I
32 0

热门文章

最新文章