剑指offer系列20之包含min函数的栈

要求

  • 时间限制:1秒
  • 空间限制:32768K
  • 热度指数:227391
  • 本题知识点: 栈

题目描述

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

思路

借助一个辅助栈,辅助栈的 t o p top top值总是最小值。具体做法如下:
p u s h push push方法:
原栈直接入栈;辅助栈仅当当前为空或者入栈的值小于等于辅助栈栈顶的值时入栈。
p o p pop pop方法:
当原栈不为空时,判断辅助栈与原栈的栈顶值是否相同,若相同则两者同时出栈;若不相同则仅原栈出栈。
t o p top top方法:
直接返回原栈栈顶值。
m i n min min方法:
直接返回辅助栈栈顶的值。时间复杂度为 ( O ( 1 ) ) (O(1)) (O(1))

python实现
# -*- coding:utf-8 -*-
class Solution:
    stack = []
    stack_temp = []
    def push(self, node):
        # write code here
        self.stack.append(node)
        if len(self.stack_temp) == 0:
            self.stack_temp.append(node)
        elif self.stack_temp[-1]>=self.stack[-1]:
            self.stack_temp.append(node)
    def pop(self):
        # write code here
        if len(self.stack)>0:
            if self.stack_temp[-1] == self.stack[-1]:
                self.stack_temp.pop()
            self.stack.pop()
    def top(self):
        # write code here
        return self.stack[-1]
    def min(self):
        # write code here
        return self.stack_temp[-1]
  • 运行时间:22ms

  • 占用内存:5624k

C++实现
class Solution {
public:
    stack<int> st1, st2;
    void push(int value) {
        st1.push(value);
        if (st2.empty())
            st2.push(value);
        else if (st2.top() >= value)
            st2.push(value);
    }
    void pop() {
        if (st1.top() == st2.top())
            st2.pop();
        st1.pop();
    }
    int top() {
        return st1.top();
    }
    int min() {
        return st2.top();
    }
};
  • 运行时间:3ms
  • 占用内存:464k
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值