力扣刷题(python)50天——第三十六天:最小栈

力扣刷题(python)50天——第三十六天:最小栈

题目描述

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

push(x) – 将元素 x 推入栈中。
pop() – 删除栈顶的元素。
top() – 获取栈顶元素。
getMin() – 检索栈中的最小元素。
示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.getMin();   --> 返回 -2.

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

方法

我们可以设置一个新的属性来记录当前操作后当前最小值,当获取最小值时只需要返回该属性即可。

解答

class MinStack(object):

    def __init__(self):
        """
        initialize your data structure here.
        """
        self.minnum=float('inf')
        self.list1=[]

    def push(self, x):
        """
        :type x: int
        :rtype: None
        """
        self.list1+=[x]
        self.minnum=min(self.minnum,x)

    def pop(self):
        """
        :rtype: None
        """
        self.list1.pop()
        self.minnum=float('inf')
        for each in self.list1:
            self.minnum=min(self.minnum,each)
            
    def top(self):
        """
        :rtype: int
        """
        return self.list1[-1]
        

    def getMin(self):
        """
        :rtype: int
        """
        return self.minnum


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

执行结果

力扣刷题(python)50天——第三十六天:最小栈_第1张图片

改进:

由于使用了in,故会拖很多时间,因此可以设置两个参数来表示最小值,当调用pop方法时检测最小值是否为最顶部的数,如果是的话则直接调用最后一个push()方法之前的另一个最小值即可,预计时间会节省很多。

改进:

设置一个辅助栈来保存最小值。。。。
栈一般C会比较麻烦,之后再刷的时候看看。

https://leetcode-cn.com/problems/min-stack/solution/min-stack-fu-zhu-stackfa-by-jin407891080/

你可能感兴趣的:(leetcode刷题)