栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

实现一个含时间复杂度为O(1)的min函数的栈

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

实现一个含时间复杂度为O(1)的min函数的栈

包含min函数的栈

第二天打卡,废话不多说,我们开始吧。
题目
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.min();   --> 返回 -2.

提示:
各函数的调用总次数不超过 20000 次

思路:

我们通过读题,可以发现需要在常量级的时间内找到最小值!
那自然就可以想到,我们绝不能在需要最小值的时候,再做排序,查找等操作来获取!所以,我们可以创建两个栈,一个栈是原栈 min,正常进行操作,而辅助栈assi则存放应主栈不同时期的最小值。

代码实现
class MinStack {
    stack  mi,ass;
public:
    
    MinStack() {
        ass.push(INT_MAX); //初始化辅助栈,使top函数能正常操作
        }
  
    void push(int x) {      //压栈的时候我们对原栈和辅助栈都要进行操作,
       //原栈就正常压,辅助栈在压的时候进行判断,压当前栈和输入中的最小的
            mi.push(x);
            if(x 
运行结果: 

![在这里插入图片描述](https://img-blog.csdnimg.cn/1c38e8a9b4844bee9a35d1b767fa67e0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA57u057qz5pav6auY5aSa5bCR,size_18,color_FFFFFF,t_70,g_se,x_16

时间复杂度:其实题目中就已经给出要求,这些操作都在常数级时间复杂度。
空间复杂度:在这里我们用了两个栈来储存数据,所以空间复杂度是O(n)。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/630429.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号