剑指offer:包含min函数的栈

题目描述:

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

解题思路:

相当与在保留原栈的同时,去维护一个最小栈。利用一个辅助栈来完成。对于每个新输入的数,在压入原栈的同时,需要去判断是否为最小值,若为最小指,则压入辅助栈,否则将当前最小值压入辅助栈。这样就相当于两个栈的大小是相等的,每次做push和pop操作时,二者需要同步。最后的min函数只需要取辅助栈的top就可以。

代码:

class Solution {
public:
    stack<int>cur, min_stack;
    void push(int value) {
        cur.push(value);
        if(min_stack.empty())
            min_stack.push(value);
        else
        {
            if(value < min_stack.top())
                min_stack.push(value);
            else
                min_stack.push(min_stack.top());
        }
    }
    void pop() {
        if(!cur.empty())
        {
            cur.pop();
            min_stack.pop();
        }

    }
    int top() {
        if(!cur.empty())
            return cur.top();
        return 0;
    }
    int min() {
        if(!min_stack.empty())
        {
            return min_stack.top();
        }
        return 0;
    }
};

原文地址:https://www.cnblogs.com/LJ-LJ/p/10599221.html

时间: 2024-07-30 09:57:14

剑指offer:包含min函数的栈的相关文章

剑指offer包含min函数的栈python

题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 思路 定义两个栈,一个保存正常的数据,另一个用来记录当前的最小元素 代码 # -*- coding:utf-8 -*- class Solution: def __init__(self): self.stack1 = [] self.stack2 = [] self.cur = -1 def push(self, node): # write code here if self.c

剑指offer--27.包含min函数的栈

时间限制:1秒 空间限制:32768K 热度指数:252822 本题知识点: 栈 算法知识视频讲解 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). class Solution { public: void push(int value) { data.push(value); if(minnum.empty()) minnum.push(value); else if(minnum.top()<value) minnum.pus

剑指Offer19 包含min函数的栈

1 /************************************************************************* 2 > File Name: 19_MinInStack.cpp 3 > Author: Juntaran 4 > Mail: [email protected] 5 > Created Time: 2016年08月30日 星期二 19时29分48秒 6 **************************************

剑指:包含min函数的栈(min栈)

题目描述 设计一个支持 push,pop,top 等操作并且可以在 O(1) 时间内检索出最小元素的堆栈. push(x)–将元素x插入栈中 pop()–移除栈顶元素 top()–得到栈顶元素 getMin()–得到栈中最小元素 样例 MinStack minStack = new MinStack(); minStack.push(-1); minStack.push(3); minStack.push(-4); minStack.getMin(); --> Returns -4. minSt

剑指offer-包含min函数的栈20

题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). class Solution: def __init__(self): self.stack=[] self.minj=0 def push(self, node): # write code here self.stack.append(node) if len(self.stack)==0: self.minj=node else: self.minj=min(self.stac

剑指offer-包含min函数的栈-栈和队列-python

题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). # -*- coding:utf-8 -*- class Solution: def __init__(self): self.stack = [] self.minstack = [] def push(self, node): # write code here if not self.minstack or self.minstack[-1] >= node: self.min

剑指offer---包含min函数的栈

class Solution { public: void push(int value) { stack1.push(value); } void pop() { stack1.pop(); } int top() { return stack1.top(); } int min() { //用一另一个栈存放读入的数据 int minNum=0; if(!stack1.empty()) { minNum =stack1.top(); stack2.push(stack1.top()); sta

包含min函数的栈-剑指Offer

包含min函数的栈 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数 思路 使用一个辅助栈,跟踪原始栈中每个元素在栈口时的该栈的最小值 代码 import java.util.Stack; public class Solution { Stack<Integer> s_data = new Stack(); Stack<Integer> s_min = new Stack(); public void push(int node) { s_data.

剑指offer系列源码-包含min函数的栈

题目1522:包含min函数的栈 时间限制:1 秒内存限制:128 兆特殊判题:否提交:1495解决:476 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为一个整数n(1<=n<=1000000), n代表将要输入的操作的步骤数. 接下来有n行,每行开始有一个字母Ci. Ci='s'时,接下有一个数字k,代表将k压入栈. Ci='o'时,弹出栈顶元素. 输出: 对应每个测

剑指Offer对答如流系列 - 包含min函数的栈

面试题30:包含min函数的栈 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). 问题分析 push 和 pop均容易实现. 主要就是min函数的定义,如果要通过操作push和pop操作获取最小元素时间复杂度为O(1),基本上是不可能的. 如果我们另外定义一个成员变量 专门存储最小元素的值,但是当最小元素弹出后,min就需要相应改变,所以必须把每次的最小值都存储下来.这个时候不得不考虑采用一个辅助栈