面试题-Stack的最小值o(1)

简介: 1 // Stack.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include 6 using namespace std; 7 8 template 9 struct Stack 10 ...
 1 // Stack.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <iostream>
 6 using namespace std;
 7 
 8 template <class Type>
 9 struct Stack
10 {
11 private:
12 Type *_stack;
13 int _top;
14 int _min;
15 int _size;
16 
17 
18 public:
19 Stack(const Type &size):_size(size),_top(0),_min(0)
20 {    
21 _stack = new Type[size];//(Type*)malloc(sizeof())
22 }
23 void push(const Type &value)
24 {
25 
26 if(_top == 0)
27 {
28 _min = value;
29 }
30 else if(_top == _size)
31 {
32 cout<<"Push failed,the stack is full"<<endl;
33 return;
34 }
35 _stack[_top++] = value-_min;
36 if(value < _min)
37 {    
38 _min = value;
39 }
40 
41 }
42 Type pop()
43 {
44 if(_top == 0)
45 {
46 cout<<"Pop failed,the stack is emply."<<endl;
47 return -1;
48 }
49 Type popvalue;
50 if(_stack[--_top]<0)
51 {
52 popvalue = _min;
53 _min = _min-_stack[_top];
54 }
55 else
56 {
57 popvalue = _min + _stack[_top];
58 }
59 return popvalue;
60 }
61 Type min()
62 {
63 return _min;
64 }
65 
66 };
67 
68 int _tmain(int argc, _TCHAR* argv[])
69 {
70 Stack<int> sk(30);
71 sk.push(8);
72 sk.push(7);
73 sk.push(6);
74 sk.push(5);
75 sk.push(9);
76 sk.push(4);
77 sk.push(3);
78 
79 cout<<sk.min()<<endl;//3
80 cout<<sk.pop()<<endl;//3
81 cout<<sk.min()<<endl;//4
82 cout<<sk.pop()<<endl;//4
83 cout<<sk.min()<<endl;//5
84 cout<<sk.pop()<<endl;//9
85 cout<<sk.min()<<endl;//5
86 cout<<sk.pop()<<endl;//5
87 cout<<sk.min()<<endl;//6
88 cout<<sk.pop()<<endl;//6
89 cout<<sk.min()<<endl;//7
90 cout<<sk.pop()<<endl;//7
91 cout<<sk.min()<<endl;//8
92 cout<<sk.pop()<<endl;//8
93 
94 return 0;
95 }
96 
97  

 


作者: HarlanC

博客地址: http://www.cnblogs.com/harlanc/
个人博客: http://www.harlancn.me/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接

如果觉的博主写的可以,收到您的赞会是很大的动力,如果您觉的不好,您可以投反对票,但麻烦您留言写下问题在哪里,这样才能共同进步。谢谢!

目录
相关文章
|
2月前
|
存储 算法
《剑指offer》之“包含min函数的栈”题解
《剑指offer》之“包含min函数的栈”题解
10 0
|
3月前
面试题 03.02:栈的最小值
面试题 03.02:栈的最小值
17 0
|
10月前
|
存储 程序员 C++
剑指Offer - 面试题30:包含min函数的栈
剑指Offer - 面试题30:包含min函数的栈
59 0
|
10月前
剑指offer_栈和队列---包含min函数的栈
剑指offer_栈和队列---包含min函数的栈
40 0
|
10月前
剑指offer 29. 包含min函数的栈
剑指offer 29. 包含min函数的栈
30 0
面试题30. 包含min函数的栈|刷题打卡
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
76 0
最小栈 Min_Stack
最小栈 Min_Stack
82 0
最小栈 Min_Stack
LeetCode 155:最小栈 Min Stack
LeetCode 155:最小栈 Min Stack 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) -- 将元素 x 推入栈中。 pop() -- 删除栈顶的元素。
783 0
[剑指offer]包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。 解题思路 用一个栈stack保存数据,用另外一个栈temp保存依次入栈最小的数 比如,stack中依次入栈5, 3, 4, 10, 2, 12, 1, 8 则temp依次入栈5, 3, 3,3, 2, 2, 1, 1 每次入栈的时候,如果入栈的元素比min中的栈顶元素小或等于则入栈,否则用最小元素入栈。
1208 0