LeetCode.155.最小栈

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

  • push(x) – 将元素 x 推入栈中。
  • pop() – 删除栈顶的元素。
  • top() – 获取栈顶元素。
  • getMin() – 检索栈中的最小元素。
    构建两个栈
    数据栈:一个用来存储数据的栈。
    最小索引栈:另一个栈的每一位i,用来存储前i位(包括第i位)的最小数的索引。
    getMin():取出最小值操作:返回最小索引栈的最后一位,即当前栈的最小值的索引。

python代码如下:

class MinStack:

    def __init__(self):
        """
        initialize your data structure here.
        初始化两个栈,
        一个栈用来存储数据
        另一个栈用来存储前i位最小值的索引
        """
        self.stack = []
        self.stackindex = []
        
    def stack_empty(self):
        """
        判断当前栈是否为空
        """
        return len(self.stack) == 0
    
    def push(self, x):
        """
        :type x: int
        :rtype: void
        """
        if self.stack_empty():
            self.stackindex.append(0)      #如果数据栈为空,索引栈就应该添加索引0.即初始位置
        else:
            if x < self.stack[self.stackindex[-1]]:
                self.stackindex.append(len(self.stackindex))#如果当前添加的数是更小的数,索引栈添加数据栈长度为新的最小值的索引
            else:
                self.stackindex.append(self.stackindex[-1])#如果不是更小的数,索引栈就添加此时索引栈的最后一位的值
        self.stack.append(x)
        
    
    def pop(self):
        """
        :rtype: void
        """
        if self.stack_empty():
            raise Exception("under flow")   #数据栈为空抛出下溢异常
        else:
            del(self.stackindex[-1])  #删除索引栈的最后一位
            return self.stack.pop()

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

    def getMin(self):
        """
        :rtype: int
        """
        return self.stack[self.stackindex[-1]]  #数据栈最小值的索引保存在索引栈的最后一位
        
       

猜你喜欢

转载自blog.csdn.net/qq_20966795/article/details/84893053
今日推荐