剑指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  ************************************************************************/
 7
 8 #include <stdio.h>
 9 #include <bits/stdc++.h>
10
11 using namespace std;
12
13 template<class T>
14 class minStack
15 {
16 private:
17     stack<T> stack_data;
18     stack<T> stack_min;
19
20 public:
21
22     void push(T &value)
23     {
24         // 新元素入栈
25         stack_data.push(value);
26
27         // 新元素比之前最小元素小的时候,新元素进入辅助栈
28         // 否则把之前最小元素重复插入辅助栈
29         if (stack_min.size()==0 || value<stack_min.top())
30             stack_min.push(value);
31         else
32             stack_min.push(stack_min.top());
33     }
34     T pop()
35     {
36         assert(stack_data.size()>0 && stack_min.size()>0);
37         stack_data.pop();
38         stack_min.pop();
39         return stack_data.top();
40     }
41     T min()
42     {
43         assert(stack_data.size()>0 && stack_min.size()>0);
44         return stack_min.top();
45     }
46 };
47
48 int main()
49 {
50     minStack<int> mStack;
51     for (int i = 0; i < 5; i++)
52     {
53         cout << i << " push" << endl;
54         mStack.push(i);
55     }
56     cout << "min is " << mStack.min() << endl;
57     for (int i = 1; i < 3; i++)
58     {
59         cout << mStack.pop() << " pop" << endl;
60     }
61     cout << "min is " << mStack.min() << endl;
62     for (int i = 5; i < 7; i++)
63     {
64         cout << i << " push" << endl;
65         mStack.push(i);
66     }
67     cout << "min is " << mStack.min() << endl;
68     for (int i = 1; i < 3; i++)
69     {
70         cout << mStack.pop() << " pop" << endl;
71     }
72     int k = -1;
73     mStack.push(k);
74     cout << "min is " << mStack.min() << endl;
75     cout << endl;
76 }
时间: 2024-11-29 00:20:34

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

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

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

剑指:包含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就需要相应改变,所以必须把每次的最小值都存储下来.这个时候不得不考虑采用一个辅助栈