力扣最小栈

  1. 最小栈
    设计一个支持 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.

这个题的难点在于怎么记录当前栈中的最小值。
1.思路 设置两个列表,一个是当前储存的列表items,一个当前栈中最小的列表mins。
1.第一次压入栈把最小值记录设置为第一个数,如果不是第一次压入栈,查看之前mins最后一个元素是否大于当前压入的值,如果大于当前的值,就把这个数同时压入两个列表中,如果比当前的值小,items还是压入这个值,但是mins压入之前的值。
2.其他的就很简单了查看一下代码就行了。

class MinStack:

    def __init__(self):
        """
        initialize your data structure here.
        """
        self.items=[]
        self.mins=[]
        self.min=0

    def push(self, x: int) -> None:
        if len(self.items)==0:
            self.items.append(x)
            self.mins.append(x)
            self.min=x
        else:    
            if self.getMin()>x:
                self.items.append(x)
                self.mins.append(x)
            else:
                self.items.append(x)
                self.mins.append(self.mins[-1])

    def pop(self) -> None:
        self.items.pop()
        self.mins.pop()
        

    def top(self) -> int:
        return self.items[-1]
        

    def getMin(self) -> int:
        return self.mins[-1]


# 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()

猜你喜欢

转载自blog.csdn.net/weixin_41781408/article/details/88048931
今日推荐