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

题目

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

思路

能够想到存储最小元素,关键是当最小元素被弹出之后,如何存储次小元素。

我们用一个辅助栈来存储。

1、当压入数字时,如果它比最小的还要小,则在辅助栈和数据栈中都压入该元素;如果它比最小元素大,则在数据栈中压入该数字,在辅助栈就依旧压入最小元素。

2、当弹出数字时,数据栈和辅助栈都弹出

3、当获得min时,直接获得栈顶元素即可

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

原文地址:https://www.cnblogs.com/shiganquan/p/9341427.html

时间: 2024-09-29 18:49:02

【剑指offer】30、包含min函数的栈的相关文章

剑指OFFER之包含min函数的栈

题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为一个整数n(1<=n<=1000000), n代表将要输入的操作的步骤数.接下来有n行,每行开始有一个字母Ci.Ci=’s’时,接下有一个数字k,代表将k压入栈.Ci=’o’时,弹出栈顶元素. 输出: 对应每个测试案例中的每个操作,若栈不为空,输出相应的栈中最小元素.否则,输出NULL. 样例输入: 7 s 3 s 4 s 2

剑指Offer 20. 包含min函数的栈 (栈)

题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 题目地址 https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49?tpId=13&tqId=11173&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 思路 使用两个栈,一个为数据栈,一个

[剑指offer] 20. 包含min函数的栈

题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 利用两个栈,一个栈来正常保存所有元素,另一个栈作为辅助.仅在以下情况使用: push: 当辅助栈为空,或者辅助栈顶元素大于入栈元素时,辅助栈也push(value) pop: 当辅助栈顶元素等于主栈顶元素时,辅助栈也pop() min: 返回辅助栈栈顶元素 class Solution { public: stack<int> sta1; stack<int> sta2

剑指offer:包含min函数的栈

题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 解题思路: 相当与在保留原栈的同时,去维护一个最小栈.利用一个辅助栈来完成.对于每个新输入的数,在压入原栈的同时,需要去判断是否为最小值,若为最小指,则压入辅助栈,否则将当前最小值压入辅助栈.这样就相当于两个栈的大小是相等的,每次做push和pop操作时,二者需要同步.最后的min函数只需要取辅助栈的top就可以. 代码: class Solution { public: stac

【剑指offer】包括min函数的栈

转载请注明出处:http://blog.csdn.net/ns_code/article/details/26064213 剑指offer上的第21题,之前在Cracking the Coding interview上做过,思路參考这里,这次写了測试函数,在九度OJ上測试通过. 题目描写叙述: 定义栈的数据结构,请在该类型中实现一个可以得到栈最小元素的min函数. 输入: 输入可能包括多个測试例子,输入以EOF结束.对于每一个測试案例,输入的第一行为一个整数n(1<=n<=1000000),

【剑指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

30 包含min函数的栈(举例让抽象问题具体化)

题目描述: 定义栈的数据结构(push/pop),请在该类型中实现一个能够得到栈中所含最小元素的min函数(三者的时间复杂度都应为O(1)). 测试用例: 1)新压入栈的数字比之前的最小值大/小 2)弹出的数字不是最小的元素/是最小的元素 解题思路: 1)借助辅助栈存储最小值,辅助栈顶一定都当前栈的最小值 class Solution { public: void push(int value) { if(data.empty()){ data.push(value); minValue.pus

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

面试题30:包含min函数的栈 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). 问题分析 push 和 pop均容易实现. 主要就是min函数的定义,如果要通过操作push和pop操作获取最小元素时间复杂度为O(1),基本上是不可能的. 如果我们另外定义一个成员变量 专门存储最小元素的值,但是当最小元素弹出后,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.

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

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