设计一个可以获取最小值功能的栈
来源:互联网 发布:手机自动安装软件 编辑:程序博客网 时间:2024/05/23 13:47
设计一个有getMin功能的栈 – C++实现
【题目】:
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
【要求】:
1、pop、push、getMin操作的时间复杂度都是O(1)。
2、设计的栈类型可以使用现成的栈结构。
解题设计
使用两个栈,一个栈保存当前栈中元素(stackData),另一个保存每次入栈的最小值(stackMin)。
具体解题算法C++代码:
class MyStack{private: stack<int>* stackData; //数据栈 stack<int>* stackMin; //最小栈public: MyStack() { stackData = new stack<int>; stackMin = new stack<int>; } ~MyStack() { delete stackData; delete stackMin; } //压栈 bool push(int newNum) { //最小栈若为空,压入新元素,否则比较新元素和最小值大小,小于等于最小值时压栈 if (stackMin->empty()) { stackMin->push(newNum); } else if (newNum <= getMin()) { stackMin->push(newNum); } stackData->push(newNum); return true; } //出栈,返回stackData栈顶元素 int pop() { if (stackData->empty()) throw runtime_error ("stackData is empty"); int value = stackData->top(); stackData->pop(); //数据栈中元素删除时,若此数据存在于最小栈中,最小栈栈顶元素出栈 if (value == getMin()) { stackMin->pop(); } return value; } //获取栈中最小值 int getMin() { if (stackMin->empty()) throw runtime_error("stackMin is empty"); return stackMin->top(); }};
测试用例
#include <iostream>#include <stack>#include <stdexcept>#include <exception>using namespace std;//上述算法代码int main(){ MyStack s; s.push(7); s.push(6); s.push(5); s.push(4); s.push(5); s.push(3); s.push(2); s.push(13); s.push(1); cout << "min: " << s.getMin(); cout << endl; cout << "after pop:" << endl; s.pop(); s.pop(); s.pop(); s.pop(); s.pop(); s.pop(); cout << "min: " << s.getMin(); cout << endl; system("pause");}
运行结果:
min: 1after pop:min: 5请按任意键继续. . .
0 0
- 设计一个可以获取最小值功能的栈
- 【题目6】如何设计一个可以获取最小值的栈
- 实现可以获取最小值的栈
- C++使用两个栈实现一个可以获取栈中最大值和最小值的栈
- 栈和队列之设计一个有getMin(得到最小值)功能的栈
- 支持最小值的栈设计
- cci-Q3.2 设计栈可以返回最小值
- 设计一个有getMin功能的栈
- 设计一个有getMin功能的栈
- 设计一个有getMin功能的栈
- 设计一个有getMin功能的栈
- 设计一个有getMin功能的栈
- 设计一个有getMin功能的栈
- 设计一个有getMin功能的栈
- 设计一个有getMin功能的栈
- 设计一个有getMin功能的栈
- 设计一个有getMin功能的栈
- 设计一个具有GetMin功能的栈
- ECharts 统计图中的bar(条形统计)的X轴上的值的显示方法
- iOS之修改项目BUG之旅--(七)
- hdu_1011_Starship Troopers(树形DP)
- Python 修饰符的例子
- Spring MVC @RequestBody接收JSON报HTTP Statusd 415的问题
- 设计一个可以获取最小值功能的栈
- C# 设置Excel打印选项及打印excel文档
- 派思电池企业软件管理模块
- 51822 --- 主机主动扫描和被动扫描
- shell脚本dos问题
- 点击获取网络大图(支持缩放)
- 我对自己说:万丈高楼平地起
- ChatOps如何变革企业业务
- V4l2 capture时 USERPTR和MMAP的区别