题面

实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中的最小元素的操作。

要求

pop(), push(), getMin()时间复杂度都是O(1)

思路

1.准备两个栈,数据栈+最小元素栈
2.压入元素时,先压入数据栈,然后与最小元素栈顶比较;若小,则压入,若大,不做处理(1)/压入当前栈顶(2)
(1)若不做处理,那么需要在pop()弹出时,做判断,若stackData要弹出的元素与stackMin顶相等,那么将stackMin顶也一并弹出
(2)若2中采用再次压入stackMin顶元素,那么在pop()函数中,就只要弹出两个栈顶即可,逻辑较为简单。

实现 (代码未测试,注意!)

【1】占用额外空间较小,但pop(),push()函数较为复杂

 class MyStack_1 {
private:
stack<int> stackData;//数据栈
stack<int> stackMin;//最小元素栈
public:
void push(int num)
{
stackData.push(num);
if (stackMin.empty())//为空,直接压入
stackMin.push(num);
else
{
if (num < stackMin.top())
stackMin.push(num);
}
}
int pop()
{
if (!stackData.empty())//数据栈非空
{
int top = stackData.top();
stackData.pop();
if (top == stackMin.top())
stackMin.pop();
return top;
}
}
int getMin()
{
return stackMin.top();
}
int top()
{
return stackData.top();
}
};

【2】占用额外空间较大,操作函数简单。

 class MyStack_2 {
private:
stack<int> stackData;//数据栈
stack<int> stackMin;//最小元素栈
public:
void push(int num)
{
stackData.push(num);
if (stackMin.empty())//为空,直接压入
stackMin.push(num);
else
{
if (num < stackMin.top())//小,压入它
stackMin.push(num);
else//大,压入当前栈顶
stackMin.push(stackMin.top());
}
}
int pop()
{
if (!stackData.empty())//数据栈非空
{
int top = stackData.top();
stackData.pop();
stackMin.pop();
return top;
}
}
int getMin()
{
return stackMin.top();
}
int top()
{
return stackData.top();
}
};

最新文章

  1. MySQL 的相关语句(增删改查)(SQLyog软件实现)
  2. iOS静态库及Framework 创建
  3. /etc/ethers【地址映射】
  4. 转:android异步任务设计思详解(AsyncTask)
  5. Spark常用函数(源码阅读六)
  6. python中,ascii,unicode,utf8,gbk之间的关系梳理
  7. HTML5自学笔记[ 15 ]canvas绘图实例之钟表
  8. BIP_BI Publisher Administrator设定Configuration/Font/Currencies(案例)
  9. HDU1018-Big Number
  10. 计蒜客 无脑博士 bfs
  11. 轻量级django 一
  12. redis info
  13. Hash算法的讲解
  14. 多重if-else语句
  15. FastReport预览后直接邮件发送
  16. 042、用volume container 共享数据 (2019-03-05 周二)
  17. 【linux】在宝塔上 同ip 不同端口 设置一个端口对应一个网站
  18. mui 总结
  19. 服务请求比较慢SYN flooding
  20. 正则解析json数据

热门文章

  1. python基础之:九步认识装饰器
  2. 使用MockMvc进行springboot调试(SpringbootTest)
  3. 在Excel多个工作表间快速切换的绝招
  4. delphi字符串分隔函数用法实例
  5. Apache配置优化一(查看当前apache数据)
  6. (九)Centos之搜索命令whereis、which和字符串搜索命令grep
  7. nginx多个if条件并且查询
  8. thinkPHP 类库映射 类库导入
  9. CentOS系统安装启动tomcat
  10. C语言程序设计II—第十二周教学