包含min函数的栈
来源:互联网 发布:淘宝怎么设置客服号 编辑:程序博客网 时间:2024/06/07 10:50
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
解法1
双栈或pair,一个存储数据,一个用来存储当前栈中最小值
class Solution {public: void push(int value) { haha.push(pair<int, int>(value, haha.empty()? value : (value < min() ? value : min()))); } void pop() { haha.pop(); } int top() { return haha.top().first; } int min() { return haha.top().second; }private: stack<pair<int, int>> haha;};
解法二
不借用辅助栈,只用一个变量minValue,空间复杂度O(1), 原栈只存value与minValue的差值,注意push和pop时的操作
push:第一次入0,赋值给minValue,之后若发现比minValue小,则先入栈(这里就是旧minValue与新minValue的差)再更新minValue
pop : 如果发现栈顶为负,说明要将minValue回退到旧的
top : 如果栈顶为正,返回minValue+top(),否则说明是应是当前最小值,返回minValue。
如3、4、1 开始0入栈,minvalue为3,之后4-3=1入栈,1-3=-2入栈,minvalue为1,此时若要出栈,发现-2为负,要恢复minValue为-2(1)还没入时的状态,即1-(-2)=3,若要返回栈顶,则需直接返回minValue为1。
class Solution {public: void push(int value) { if(haha.empty()){ haha.push(0); minValue = value; }else{ haha.push(value - minValue); if(value < minValue) minValue = value; } } void pop() { if(haha.top() < 0) minValue -= haha.top(); haha.pop(); } int top() { if(haha.top() > 0) return haha.top() + minValue; return minValue; } int min() { return minValue; }private: stack<int> haha; int minValue;};
0 0
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min 函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- (转)最全面的Android Webview详解
- MyBatis框架基于Annotation注解的一对一关联映射
- 欢迎使用CSDN-markdown编辑器
- cocos 学习笔记(三)动作
- php kafka
- 包含min函数的栈
- java学习之队列的实现
- 【caffe】win7+vs2013+安装NuGet
- 行为型模式-访问者(visitor)
- JavaScript通用继承方法和super
- CF 792D
- c 程序设计语言 第二版 练习题 4-12
- LOI Online Judge 33. 【2017.4.1】面包店
- solr初级教程