经典算法——包含min函数的栈

题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

class Solution {
public:
    stack<int> stack1;
    stack<int> helpStack;//辅助栈,存放最小值

    void push(int value)
    {
        stack1.push(value);

        if(helpStack.size()==0 || value<helpStack.top())//每次都把最小值压入辅助栈
            helpStack.push(value);
        else
            helpStack.push(helpStack.top());
    }        

    void pop()
    {
         stack1.pop();
         helpStack.pop();
    }

    int top()
    {
        return stack1.top();
    }

    int min()
    {
        return helpStack.top();
    }
};
时间: 2024-10-25 13:25:19

经典算法——包含min函数的栈的相关文章

包含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.

微软100题系列之-----设计包含min函数的栈

题意: 定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素. 要求函数min.push 以及pop 的时间复杂度都是O(1). 思路:定义两个栈,一个用来记录数据的插入和删除,一个用来存储最小值的变化 代码如下: template <class T> class Stack { public: Stack(int len=100); T Min(); T Pop(); void Push(T val); private: T top1,top2; T *stack1,*stack

【编程题目】设计包含 min 函数的栈

2.设计包含 min 函数的栈(栈)定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素.要求函数 min.push 以及 pop 的时间复杂度都是 O(1). 我的思路: 用一个额外的元素记录最小值,push时若遇到更小的则更新.但是pop的时候遇到了问题,最小的弹出去了怎么得到下一个最小的值? 总觉得要排序,再存一个min的链.结果没达到O(1). /* 2.设计包含 min 函数的栈(栈) 定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素. 要求函数 min

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

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

2.设计包含 min 函数的栈

http://zhedahht.blog.163.com/blog/static/25411174200712895228171/ http://blog.csdn.net/anchor89/article/details/6055412 http://blog.csdn.net/sgbfblog/article/details/7752878 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素.要求函数min.push以及pop的时间复杂度都是O(1). 解法一: 使用一个辅助栈来

包含min函数的栈 + 栈的压入、弹出序列

剑指offer 两道关于 数据结构——栈 的题目 1. 包含min函数的栈 简要分析一下这道题,这道题做了3遍才过,踩了一些小坑 看看示例: 得到了规律,那么关键部分的代码实现,就在于 两个栈(rawStack 和 minStack) 和 push() 方法 Stack<Integer> rawStack = new Stack<>(); Stack<Integer> minStack = new Stack<>(); public void push1(i

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

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

【剑指offer】【栈】30.包含min函数的栈

包含min函数的栈 维护两个栈:栈st存储所有元素,minSt是一个单调栈,栈顶元素为min 1. 入栈:st.push(x); 若minSt.top >= x或minSt为空,x入栈minSt 2. 出栈:若minSt与st栈顶元素相同,则二者都出栈,否则st出栈 3. 获取最小值:若minSt不为空,返回minSt栈顶元素 class MinStack { public: stack<int> st; stack<int> minSt; /** initialize yo

【算法题目】包含min函数的栈

题目来源:<剑指offer>面试题21 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min,push以及pop的时间复杂度都是O(1). 分析:假设用于存储主要数据的栈称为数据栈.我们增加一个辅助栈,它的栈顶元素永远是当前数据栈中元素的最小值.当插入元素时,如果插入的元素比辅助栈栈顶还小,那么就往辅助栈压入这个数据作为当前数据栈新的最小值.如果大的话,再次压入辅助栈的栈顶元素,表明来了一个新元素后,最小值没有变换. //m_data是数据栈,m_