155. 最小栈

本文介绍了在LeetCode上的一道编程题,要求设计一个支持在常数时间内检索最小元素的MinStack类,通过维护一个额外的列表同步存储最小值。给出了两种Python实现方法,分别利用列表和同步更新最小值的方法来满足题目需求。
摘要由CSDN通过智能技术生成

题目-中等难度

设计一个支持 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.
minStack.getMin(); --> 返回 -2.

提示:

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/summary-ranges
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1. py list

时间
444ms
击败 16.89%使用 Python 的用户
内存
16.09mb
击败 56.84%使用 Python 的用户

class MinStack(object):

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

    def push(self, val):
        """
        :type val: int
        :rtype: None
        """
        self.li += [val]


    def pop(self):
        """
        :rtype: None
        """
        self.li = self.li[:-1]


    def top(self):
        """
        :rtype: int
        """
        return self.li[-1]


    def getMin(self):
        """
        :rtype: int
        """
        return min(self.li)



# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(val)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()

2. 另设一个列表,同步存储最小值

时间
280ms
击败 20.11%使用 Python 的用户
内存
15.99mb
击败 84.18%使用 Python 的用户

class MinStack(object):

    def __init__(self):
        self.li = []
        self.m = []

    def push(self, val):
        """
        :type val: int
        :rtype: None
        """
        self.li.append(val)
        self.m.append(min(self.li))

    def pop(self):
        """
        :rtype: None
        """
        self.li.pop()
        self.m.pop()


    def top(self):
        """
        :rtype: int
        """
        return self.li[-1]


    def getMin(self):
        """
        :rtype: int
        """
        return self.m[-1]



# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(val)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值