当前位置: 首页 > news >正文

面试金典题3.2

请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。

示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.getMin();   --> 返回 -2.
class MinStack {
public://定义两个栈,一个用于存储元素,一个用于存最小值stack<int> mystack;stack<int> minstack;/** initialize your data structure here. *///先将最大值入最小值的栈,方便第一个比较MinStack() {minstack.push(INT_MAX);}//同时将元素加入两个栈void push(int x) {mystack.push(x);//比较入栈元素和当前栈顶元素,将最小值入栈minstack.push(min(x,minstack.top()));}//同时让两个栈的栈顶元素出栈void pop() {mystack.pop();minstack.pop();}//返回栈顶元素int top() {return mystack.top();}//返回最小栈的栈顶元素,即当前栈中的最小值int getMin() {return minstack.top();}
};/*** Your MinStack object will be instantiated and called as such:* MinStack* obj = new MinStack();* obj->push(x);* obj->pop();* int param_3 = obj->top();* int param_4 = obj->getMin();*/

这道题的思路很简单,就是同时定义两个栈,一个存储元素,一个存储当前栈中最小值。因此最小栈的栈顶元素永远是当前栈中的最小元素。


http://www.mrgr.cn/news/40432.html

相关文章:

  • # VirtualBox中安装的CentOS 6.5网络设置为NAT模式时,怎么使用SecureCRT连接CentOS6.5系统?
  • 713. 乘积小于 K 的子数组 滑动窗口
  • docker安装kafka-manager
  • 【分布式微服务云原生】OpenFeign:微服务通信的瑞士军刀
  • java 从基础到入门 到架构师所需要学习的路线
  • 掌握马丁格尔交易策略:Anzo Capital昂首资本教你盈利的6大原则
  • CentOS 7 系统中安装与配置 Telnet 服务详解(使用非root用户登录)
  • 基于SSM的农产品仓库管理系统【附源码】
  • 解决方案:机器学习中,回归及分类常用的模型评估指标有哪些
  • 深入解析 Java 虚拟机:内存区域、类加载与垃圾回收机制
  • 【d57】【sql】1661. 每台机器的进程平均运行时间
  • 【Python报错已解决】 Running setup.py install for wxPython did not run successfully.
  • 将 Intersection Observer 与自定义 React Hook 结合使用
  • 【C++】异常处理
  • 振动分析:现成软件与LabVIEW开发之选
  • 栈与队列相关知识(二)
  • 【NVIDIA】如何使用nvidia-smi命令管理和监控GPU
  • Redis-持久化机制
  • 平衡二叉搜索树删除的实现
  • 【区别】git restore --staged <文件> 和 git reset HEAD <文件> 都可以用于取消已暂存的文件