剑指offer之面试题21:包含min函数的栈
2016-07-09 19:20
344 查看
题目:
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
思路一:
通过每次在压入栈顶的元素与当前最小元素相比后,保存一遍最小元素,每次弹出,都弹出两个,这个就能得到栈当前最小元素了
代码:
代码:
本文出自 “momo就是辣么萌” 博客,请务必保留此出处http://momo462.blog.51cto.com/10138434/1813859
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
思路一:
通过每次在压入栈顶的元素与当前最小元素相比后,保存一遍最小元素,每次弹出,都弹出两个,这个就能得到栈当前最小元素了
代码:
class Solution { public: void push(int value) { if(s1.size()==0) { s1.push(value); int min=value; s1.push(min); } else { int min=s1.top(); if(value<min) { min=value; } s1.push(value); s1.push(min); } } //弹出两次 void pop() { int min=s1.top(); s1.pop(); int val=s1.top(); s1.pop(); } int top(){ int min=s1.top(); s1.pop(); int val=s1.top(); s1.push(min); return val; } int min() { return s1.top(); } private: stack<int> s1; };思路二:利用两个栈,一个栈用于压入数据,另一个栈用于压入数据时的最小元素。无论最小元素是不是压栈的元素,都保存到第二个栈中
代码:
class Solution { public: void push(int value) { if(s1.size()==0) { s1.push(value); s2.push(value); } else { s1.push(value); int min=s2.top(); if(min>value) { s2.push(value); } else { s2.push(min); } } } void pop() { if(!s1.empty()) { s1.pop(); s2.pop(); } } int top() { return s1.top(); } int min() { return s2.top(); } private: stack<int> s1,s2; };
本文出自 “momo就是辣么萌” 博客,请务必保留此出处http://momo462.blog.51cto.com/10138434/1813859
相关文章推荐
- 求一个字符串中出现频率最高的字符
- 华为面试题【8】-找零钱
- 华为面试题【8】-找零钱
- 华为面试题【8】-找零钱
- 华为面试题【8】-找零钱
- 华为面试题【8】-找零钱
- 华为面试题【8】-找零钱
- 华为面试题【8】-找零钱
- 大公司移动前端开发面试题——做转盘[参考代码]
- 剑指offer之面试题20:顺时针打印矩阵
- 关于对象初始化内部顺序的个人见解
- JS面试题集锦
- 2016年3月iOS面试总结
- 剑指offer之面试题17 :合并两个排序的链表
- 面试题: 栈和队列的OC实现.
- php面试题
- 剑指offer之面试题19:二叉树的镜像
- 剑指offer之面试题18:树的子结构
- "享元模式"-之Java,Android面试必问设计模式(9/9)
- 集合的补充(Map)