【剑指offer】包含min函数的栈 Python+C++

417 阅读1分钟

【题目描述】

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

【思路】

与数据栈同步建立一个存最小值的栈,每当向数据栈加入一个元素,也要向最小值栈加入一个元素。向最小值栈加入的元素是当前的最小值,只需要将加入的元素与最小值栈栈顶的元素做比较即可。这样可以保证取最小值的时间复杂度为O(1)。

【代码】

C++:
class Solution {
public:
    vector<int> stack;
    vector<int> min_stack;
    void push(int value) {
        stack.push_back(value);
        int len=min_stack.size();
        if(len==0||min_stack[len-1]>value){
            min_stack.push_back(value);
        }else{
            min_stack.push_back(min_stack[len-1]);
        }
    }
    void pop() {
        min_stack.pop_back();
        return stack.pop_back();
    }
    int top() {
        int ind=stack.size()-1;
        return stack[ind];
    }
    int min() {
        int ind=min_stack.size()-1;
        return min_stack[ind];
    }
};
Python:
# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.min_stack=[]
        self.stack=[]
    def push(self, node):
        self.stack.append(node)
        if(len(self.min_stack)==0 or node<self.min_stack[-1]):
            self.min_stack.append(node)
        else:
            self.min_stack.append(self.min_stack[-1])
    def pop(self):
        if(len(self.stack)==0):
            return None
        self.min_stack.pop(-1)
        return self.stack.pop(-1)
    def top(self):
        if(len(self.stack)==0):
            return None
        return self.stack[-1]
    def min(self):
        if(len(self.stack)==0):
            return None
        return self.min_stack[-1]