面试金典--min栈的实现
题目描述:实现一个包含min操作的栈,时间复杂度需要是O(1)
思路:一开始的想法是添加辅助栈保存当前最小元素,但是这样存在的问题就是不能处理重复元素;于是.....我还是google了,找到如下锦囊妙计
不需要额外的空间,栈顶保存的是最小元素,每次push比较,如果当前元素更小的话就更新栈顶,另外栈顶以下元素保存的是元素push的时候与
当时的最小值的差值;pop的时候,就是看栈顶元素后的下一个元素,如果小于零,说明当前需要pop最小元素,同时更新最小元素,如果大于零,
直接push(最小元素+差值)即可。有点混乱:
看例子:
3 5 2 1
push:
3
2 3
2 -1 2
2 -1 -1 1
pop:
2 -1 2 输出1
2 3 输出2
3 输出5
输出3
1 #include <iostream> 2 #include <queue> 3 #include <climits> 4 #include <algorithm> 5 #include <memory.h> 6 #include <stdio.h> 7 #include <ostream> 8 #include <vector> 9 #include <list> 10 #include <cmath> 11 #include <string> 12 #include <stdexcept> 13 #include <stack> 14 using namespace std; 15 16 template<typename T> 17 class minStack 18 { 19 public: 20 T pop(); 21 void push(const T& elem); 22 T min(); 23 stack<T> s; 24 }; 25 template<typename T> 26 void minStack<T>::push(const T&elem) 27 { 28 if(s.empty()) 29 { 30 s.push(elem); 31 return; 32 } 33 T minval = s.top(); 34 s.pop(); 35 s.push(elem-minval); 36 if(elem < minval) 37 { 38 s.push(elem); 39 } 40 else 41 s.push(minval); 42 return; 43 } 44 45 template<typename T> 46 T minStack<T>::pop() 47 { 48 if(s.empty()) 49 throw std::out_of_range("stack is empty"); 50 T minval = s.top(); 51 s.pop(); 52 T val = s.top(); 53 s.pop(); 54 if(val <= 0) 55 { 56 s.push(minval - val); 57 val = minval; 58 } 59 else 60 { 61 s.push(minval); 62 val = minval+val; 63 } 64 return val; 65 } 66 67 int main() 68 { 69 return 0; 70 }
转载于:https://www.cnblogs.com/cane/p/3793510.html
面试金典--min栈的实现相关推荐
- 程序员面试金典——3.3集合栈
程序员面试金典--3.3集合栈 Solution1:主要总结下关于vector不太常用的函数 (1)c.pop_back():删除vector对象c中最后一个元素,若c为空,则函数行为未定义.函数返回 ...
- 集合栈 牛客网 程序员面试金典 C++ Python
集合栈 牛客网 程序员面试金典 C++ Python 题目描述 请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈.该数据结构应支持与普通 ...
- 双栈排序 牛客网 程序员面试金典 C++ Python
双栈排序 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中. ...
- 程序员面试金典(第 6 版)(简单篇)
程序员面试金典 第6版 简单篇 简单篇 面试题 01.01. 判定字符是否唯一 面试题 01.02. 判定是否互为字符重排 面试题 01.03. URL化 面试题 01.04. 回文排列 面试题 01 ...
- 程序员面试金典3.1-3.6
程序员面试金典3.1-3.6 文章目录 3.1 三合一 3.2栈的最小值 3.3 堆盘子(×) 3.4化栈为队 3.5栈排序 3.6动物收容所 3.1 三合一 题读不懂,直接上链接吧.就是让用一个数组 ...
- 程序员面试金典--第k个数
程序员面试金典--第k个数 题目描述 有一些数的素因子只有3.5.7,请设计一个算法,找出其中的第k个数. 给定一个数int k,请返回第k个数.保证k小于等于100. 测试样例: 3 返回:7 逐个 ...
- C#LeetCode刷题-程序员面试金典
本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#LeetCode刷题-程序员面试金典 | .Net中文网. C#LEETCODE刷题概述 概述 所有LeetCode程序员面试金典 ...
- 《程序员面试金典》+《算法导论》
<程序员面试金典>+<算法导论> 因为最近可能会面临一波面试,但是自己各种算法以及常见的问题的熟悉程度感觉还不够,但是由前几次的代码优化经验来看,算法优化可以说是代码优化的重中 ...
- 程序员面试金典——18.5单词最近的距离
程序员面试金典--18.5单词最近的距离 Solution1:我的答案,时间复杂度为O(n2)O(n2)O(n^2). class Distance { public:int getDistance( ...
最新文章
- NYOJ题目1048破门锁
- 鸿蒙怎么运行安卓应用,华为:安卓生态应用可在部分鸿蒙设备上运行
- 各种各种的公共工具类
- python wxpython_python GUI wxPython
- Android Studio 3.3发布:官方支持导航编辑器
- vmstat记录linux状态日志到文本-随手记
- Modbus_TCP 报文格式解析
- MP3格式的音乐怎么转换成WAV格式?小编教你一招
- 基于easyx低配版flappybird
- 基于Arduino UNO的光驱写字机制作
- IOS下localstorage不起作用提示
- 理解同步和异步通信:以ROS的3中典型通信机制为例
- 体声波(BAW)射频滤波器行业调研报告 - 市场现状分析与发展前景预测
- OpenCV+ip摄像头实现远程实时监控
- 篮球数据API接口 - 【篮球赛事分析数据】API调用示例代码
- 4 int、str类型(数据类型1)、type()
- 小程序setData动态传递key
- 怎样在ipad安装ipa文件
- CStdioFile 一些基本用法
- SHP转换为SLPK
热门文章
- dbcp连接mysql,8小时会自动断开连接
- 【转载】jQuery最佳实践
- 网络学习(二十七)Windows XP 加入 Windows Server 2003 Active Directory
- 项目中除了需求外还需要知道的问题
- 苏州outlook的方向分析
- 数据中心真能促进乡村经济吗?
- 远程桌面连接错误:由于安全设置错误,客户端无法连接到远程计算机。
- SCVMM 2012 R2---安装SCVMM 2012 R2服务器
- find server/ -type d|xargs -I {} echo mkdir /root/{}
- poj-1845 Sumdiv nyoj - 928 小M的因子和