zoukankan      html  css  js  c++  java
  • 155.最小栈

    问题描述

    设计一个支持 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.
    

    解决方案

    每一个元素的存储单位中同时保存了,到此节点最小的元素值(指针),这样每次取最后一个元素就可以直接获取最小值

    class MinStack:
        def __init__(self):
            self.q = []
    
        def push(self, x):
            curMin = self.getMin()
            if curMin is None or x < curMin:
                curMin = x
            self.q.append((x, curMin))
    
        def pop(self):
            self.q.pop()
    
        def top(self):
            if len(self.q) == 0:
                return None
            else:
                return self.q[len(self.q) - 1][0]
    
        def getMin(self):
            if len(self.q) == 0:
                return None
            else:
                return self.q[len(self.q) - 1][1]
    
  • 相关阅读:
    USACO3.2.5Magic Squares
    USACO3.1.4Shaping Regions
    USACO3.2.3Spinning Wheels
    USACO3.1.3Humble Numbers
    USACO3.1.6Stamps
    USACO3.1.1AgriNet
    USACO3.3.5A Game
    USACO3.2.4Feed Ratios
    USACO3.2.2Stringsobits
    USACO3.2.6Sweet Butter
  • 原文地址:https://www.cnblogs.com/huang-yc/p/10707067.html
Copyright © 2011-2022 走看看