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

四川红叶建设有限公司网站六安网站制作多少钱

四川红叶建设有限公司网站,六安网站制作多少钱,广告制作包括范围,厂房装修多少钱一个平方米LeetCode 热题 100 | 155. 最小栈 大家好!今天我们来解决一道经典的算法题——最小栈。这道题要求我们设计一个支持 push、pop、top 操作,并能在常数时间内检索到最小元素的栈。下面我将详细讲解解题思路,并附上Python代码实现。 一、问题描…

LeetCode 热题 100 | 155. 最小栈

大家好!今天我们来解决一道经典的算法题——最小栈。这道题要求我们设计一个支持 pushpoptop 操作,并能在常数时间内检索到最小元素的栈。下面我将详细讲解解题思路,并附上Python代码实现。


一、问题描述

设计一个支持以下操作的栈:

  1. MinStack():初始化栈对象。
  2. void push(int val):将元素 val 推入栈。
  3. void pop():删除栈顶部的元素。
  4. int top():获取栈顶部的元素。
  5. int getMin():获取栈中的最小元素。

要求所有操作的时间复杂度为 O(1)。

示例:

输入:
["MinStack","push","push","push","getMin","pop","top","getMin"]
[[],[-2],[0],[-3],[],[],[],[]]输出:
[null,null,null,null,-3,null,0,-2]解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.getMin();   --> 返回 -2.

二、解题思路

核心思想

为了在常数时间内获取栈中的最小元素,我们需要在每次操作时维护当前栈的最小值。具体方法如下:

  1. 辅助栈
    • 使用两个栈:一个主栈 stack 用于存储所有元素,一个辅助栈 minStack 用于存储当前栈的最小值。
    • 每次 push 时,将元素压入主栈,并将当前最小值压入辅助栈。
    • 每次 pop 时,同时从主栈和辅助栈中弹出元素。
    • getMin 操作直接返回辅助栈的栈顶元素。

代码实现

class MinStack:def __init__(self):# 初始化主栈和辅助栈self.stack = []self.minStack = []def push(self, val: int) -> None:# 将元素压入主栈self.stack.append(val)# 将当前最小值压入辅助栈if not self.minStack or val < self.minStack[-1]:self.minStack.append(val)else:self.minStack.append(self.minStack[-1])def pop(self) -> None:# 从主栈和辅助栈中弹出元素self.stack.pop()self.minStack.pop()def top(self) -> int:# 返回主栈的栈顶元素return self.stack[-1]def getMin(self) -> int:# 返回辅助栈的栈顶元素,即当前栈的最小值return self.minStack[-1]

代码解析

  1. 初始化

    • __init__ 方法中,初始化两个栈:stackminStack
  2. push 操作

    • 将元素压入主栈 stack
    • 如果辅助栈为空或新元素小于辅助栈的栈顶元素,则将新元素压入辅助栈;否则,将辅助栈的栈顶元素再次压入辅助栈。
  3. pop 操作

    • 同时从主栈和辅助栈中弹出元素。
  4. top 操作

    • 返回主栈的栈顶元素。
  5. getMin 操作

    • 返回辅助栈的栈顶元素,即当前栈的最小值。

复杂度分析

  • 时间复杂度:所有操作的时间复杂度均为 O(1)。
  • 空间复杂度:O(n),其中 n 是栈中元素的数量。辅助栈 minStack 的大小与主栈相同。

示例运行

示例1
# 创建 MinStack 对象
minStack = MinStack()
# 执行操作
minStack.push(-2)
minStack.push(0)
minStack.push(-3)
print(minStack.getMin())  # 输出 -3
minStack.pop()
print(minStack.top())     # 输出 0
print(minStack.getMin())  # 输出 -2

输出

-3
0
-2

总结

通过使用辅助栈,我们可以在常数时间内实现 pushpoptopgetMin 操作。这种方法不仅简单高效,而且易于理解和实现。希望这篇题解对大家有所帮助,如果有任何问题,欢迎在评论区留言讨论!

关注我,获取更多算法题解和编程技巧!


文章转载自:

http://q9xD0IuL.jgcrr.cn
http://srYkjdih.jgcrr.cn
http://e6y9eH29.jgcrr.cn
http://goS44qAM.jgcrr.cn
http://3r2z2xpl.jgcrr.cn
http://5EbBc2Py.jgcrr.cn
http://KfatqK2s.jgcrr.cn
http://Kw8NVeXB.jgcrr.cn
http://sotnxWKv.jgcrr.cn
http://hVEr8ctp.jgcrr.cn
http://jOvSXbYx.jgcrr.cn
http://LCs4Wa2P.jgcrr.cn
http://PeKi9jcG.jgcrr.cn
http://JlcP2iLJ.jgcrr.cn
http://uZW8cqrl.jgcrr.cn
http://zAPcDOtr.jgcrr.cn
http://i7ACuPCd.jgcrr.cn
http://sjf5uQDg.jgcrr.cn
http://aBgYGuDj.jgcrr.cn
http://O7ulmPLR.jgcrr.cn
http://aLzijYI7.jgcrr.cn
http://ieMhdy0K.jgcrr.cn
http://x1wXnhlz.jgcrr.cn
http://hKhFZbNl.jgcrr.cn
http://5mK1DjiA.jgcrr.cn
http://qaENZ45W.jgcrr.cn
http://OfvpCrA8.jgcrr.cn
http://vGodcWKB.jgcrr.cn
http://aabPYNj8.jgcrr.cn
http://U2Nsmcz2.jgcrr.cn
http://www.dtcms.com/wzjs/689169.html

相关文章:

  • 贵州城乡住房建设部网站网站流量流出异常
  • 长寿做网站专业教育网站建设
  • 网站开发容易找工作吗深圳品牌男装有哪些
  • 吴江和城乡建设局网站龙岗召开企业服务大会
  • 商丘网站建设价格小广告推广网站
  • 常州市金坛建设局网站如何做网站域名备案
  • 贵州省城乡建设部网站首页怎么申请商标品牌
  • 桥梁建设 网站网站 展示板
  • 一锅汤资源网站建设大全南京和筑建设有限公司网站
  • 最优的网站建设推广网站怎么才能被百度收录
  • 河北远策网站建设wordpress作者增加分类插件
  • 呼市做网站公司响应式网站 图片处理
  • 网站关键词排名怎么做计算机语言python
  • 展示图片的网站模板2021年经典营销案例
  • 建立网站时间网站模版好建设吗
  • 建设厅工作证查询网站蓝色的网站
  • 河南网站seo费用长沙网站建设 鼎誉
  • 专业网站制作地址企业网站模板是什么
  • 建站公司会有多大的坑邯郸网站设计怎么做
  • 徐州网站无障碍建设网站开发开题报告范文2019
  • 一级做爰片c视频网站火车头导入wordpress
  • 网站建设用的什么语言lumen wordpress 下载
  • 漳州网站设计制作安卓html编辑器
  • 广州市从化区住房和建设据网站做机器人的网站
  • php网站开发需要学什么沈阳市网站建设报价
  • 网站推广渠道特点自建网站如何备案
  • 枞阳县建设局网站怎么做网站播放器
  • ps网站头部seo的网站
  • 网站建设首选九零后网络网店推广的目的
  • 西安建设工程网站免费编程网站