【面试题】剑指offer21--求栈里面的最小的数字
来源:互联网 发布:房贷利率上调 知乎 编辑:程序博客网 时间:2024/06/06 00:59
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素min函数。
在该栈中,调用min,push以及pop的时间复杂度都是O(1)。
首先,我们想到的方法是,在每一次入栈的时候比较一下,把小的数字放到上边,最后就可以得到最小的数字了。
但是这种方法就不能保证最先入栈的数字最后出栈,不符合栈的规则了。
于是我们想到了另外一种方法:
首先往空的数据栈里面压入一个数字5,现在最小的数字是5,我们将这个最小的数字也压入辅助栈。
接下来压入3,由于3小于之前的5,于是我们往辅助栈里面的数字更新为3。
继续往栈里面压入数字6,由于6大于之前的3,辅助栈里面压入的还是3。
继续也如数字2,由于2小于3,则辅助栈里面的数字更新为2。
再压入一个数字1,由于1小于2,辅助栈的数字更新为1。
于是最小的数字就是1。
使用代码实现:
#include<iostream>using namespace std;#include<stack>#include<assert.h>template<typename T>class StackWithMin{public:void Push(const T& data){s_Elem.push(data);if (s_Min.empty() || data < s_Min.top()){s_Min.push(data);}else{s_Min.push(s_Min.top());}}void Pop(){assert(!s_Min.empty() && !s_Elem());s_Min.pop();s_Elem.pop();}const T& Min()const{return s_Min.top();}protected:stack<T> s_Elem;stack<T> s_Min;};
阅读全文
0 0
- 【面试题】剑指offer21--求栈里面的最小的数字
- 【面试题】剑指offer21
- [剑指offer][面试题08]求旋转数组的最小数字
- 面试题:旋转数组的最小数字
- 面试题:求最小的K个数。
- 剑指offer21-包含min函数的栈
- 剑指Offer21包含min函数的栈
- 包含min的栈~~剑指offer21题
- 剑指offer21:包含min函数的栈
- 剑指offer21包含min函数的栈
- 【剑指offer】面试题8:旋转数组的最小数字
- 剑指offer面试题8:旋转数组的最小数字
- 剑指Offer:面试题8 :旋转数组的最小数字
- 《剑指offer》面试题8旋转数组的最小数字
- 《剑指Offer》之面试题旋转数组的最小数字
- 《剑指Offer》面试题8:旋转数组的最小数字
- 【剑指offer】 面试题8: 旋转数组的最小数字
- 《剑指Offer》面试题:旋转数组的最小数字
- 记一次利用Wireshark玩转骗子(任意qq好友IP精准定位)
- Java实现freemarker生成word模板
- Docker资源管理探秘:Docker背后的内核Cgroups机制
- 多线程---threadLocal
- C++的string
- 【面试题】剑指offer21--求栈里面的最小的数字
- UML统一建模语言
- jvm堆栈
- 自定义qml滑动条Slider
- 计算两个YUV视频序列的PSNR
- shell实现进度条 与 shell中的循环语句
- Sicily 1240. Faulty Odometer | 进制理解及转换
- 如何把直播嵌入微信公众账号
- 使用jqgrid 删除后返回信息。