剑指offer | 包含min函数的栈 | 09

思路分析

维护一个Smin的栈, 这个Smin保存的着前几个元素的最小值.

S:    [-1,3,-4]
Smin: [-1,-1,-4]
加入一个x
S:    [-1,3,-4,x]
Smin: [-1,-1,-4,min(-4,x)]

cpp

class Solution {
public:
    stack<int> S,Smin;
    void push(int value) {
        int x = value;
        S.push(x);
        if(Smin.empty())Smin.push(x);
        else Smin.push(x<Smin.top()?x:Smin.top());
    }
    void pop() {
        S.pop();
        Smin.pop();
    }
    int top() {
        return S.top();
    }
    int min() {
        return Smin.top();        
    }
};

python

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.S,self.Smin=[],[]
    def push(self, node):
        self.S.append(node)
        if not self.Smin:self.Smin.append(node)
        else:self.Smin.append(node if node<self.Smin[-1] else self.Smin[-1])
    def pop(self):
        self.S.pop()
        self.Smin.pop()
    def top(self):
        return self.S[-1]
    def min(self):
        return self.Smin[-1]
        
原文地址:https://www.cnblogs.com/Rowry/p/14305334.html