博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
21. 包含min函数的栈
阅读量:7007 次
发布时间:2019-06-27

本文共 1533 字,大约阅读时间需要 5 分钟。

  hot3.png

  题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push、及pop的时间复杂度都是0(1)。

  思路:建立一个数据栈和辅助栈,数据栈是正常压入数据,辅助栈是压入最小数据的。比如现在要往栈里添加的元素为:4,3,6,2入栈动作如下:

  1.因为4是第一个元素,所以它同时压入数据栈和辅助栈。
  2.然后是3,因为3比4小,所以也同时压入数据栈和辅助栈。
  3.接下去是6,因为6比辅助栈中的最小元素3大,所以它不压入辅助栈,但需往辅助栈再压入一个3,这样确保在数据栈3未被弹出之前最小值保持3.
  4.因为2比3小,所以也同时压入数据栈和辅助栈。

  测试用例:正常测试。

#include
#include
#include
using namespace std;template
class StackWithMin{public: StackWithMin(){} virtual ~StackWithMin(){} void push(const T& value); void pop(); const T& min() const;private: stack
m_data; stack
m_min;};template
void StackWithMin
::push(const T& value){ m_data.push(value); if (m_min.size() == 0 || value < m_min.top()) { m_min.push(value); } else { m_min.push(m_min.top()); }}template
void StackWithMin
::pop(){ if (m_data.size() > 0 && m_min.size() > 0) { m_data.pop(); m_min.pop(); }}template
const T& StackWithMin
::min() const{ if (m_data.size() > 0 && m_min.size() > 0) { return m_min.top(); }}void Test(const StackWithMin
& stack, int expected){ if (stack.min() == expected) { cout << "pass!" << endl; } else { cout << "failed!" << endl; }}int main(){ StackWithMin
stack; stack.push(3); Test(stack, 3); stack.push(4); Test(stack, 3); stack.push(2); Test(stack, 2); stack.push(3); Test(stack, 2); stack.pop(); Test(stack, 2); stack.pop(); Test(stack, 3); stack.pop(); Test(stack, 3); stack.push(0); Test(stack, 0); return 0;}

 

转载于:https://my.oschina.net/134596/blog/1798290

你可能感兴趣的文章
Euler 今日问世!国内首个工业级的图深度学习开源框架,阿里妈妈造 ...
查看>>
非root用户开启tomcat报错Permission denied
查看>>
Spring Boot系列(十)Spring Boot整合Elasticsearch全文搜索引擎 ...
查看>>
解决 EXT4 使用无法挂载
查看>>
linux find detail
查看>>
DLA SQL分析函数:SQL语句审计与分析的利器
查看>>
JavaScript表格的隔行换色开发
查看>>
企业应该选择哪种区块链
查看>>
antd组件Upload实现自己上传
查看>>
基于SimpleChain Beta的跨链交互与持续稳态思考
查看>>
面向IoT的协议选择思考
查看>>
重读 Youtube 深度学习推荐系统论文,字字珠玑,惊为神文
查看>>
重磅!复宏汉霖首款产品汉利康®获批,成中国生物类似药里程碑
查看>>
kubernetes安装
查看>>
回首2018 | 分析型数据库AnalyticDB:不忘初心 砥砺前行
查看>>
SpringCloud API网关-Zuul
查看>>
宽凳科技公布最新进展:已完成百余座城市数据采集,即将发布首张全自动高精度地图...
查看>>
GraphQL 分享 理论篇
查看>>
抓取猫眼电影top100的正则、bs4、pyquery、xpath实现方法
查看>>
Zabbix 中文显示(学习笔记四)
查看>>