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

怎么做个网站有产品怎么找销售渠道

怎么做个网站,有产品怎么找销售渠道,linode 安装wordpress,四川成都简阳市最新疫情155. 最小栈 题目描述 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取…

155. 最小栈

题目描述

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

实现 MinStack 类:

  • MinStack() 初始化堆栈对象。
  • void push(int val) 将元素val推入堆栈。
  • void pop() 删除堆栈顶部的元素。
  • int top() 获取堆栈顶部的元素。
  • int getMin() 获取堆栈中的最小元素。

示例 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.

提示:

  • -231 <= val <= 231 - 1
  • poptop 和 getMin 操作总是在 非空栈 上调用
  • pushpoptop, and getMin最多被调用 3 * 104 次

我们来分析这段实现 支持常数时间获取最小值的栈(MinStack) 的代码,从三个角度出发:


一、算法逻辑讲解(思路分步)

整体目标:
设计一个栈结构,要求支持四种操作:

  • push(val): 入栈元素 val;
  • pop(): 弹出栈顶元素;
  • top(): 获取栈顶元素;
  • getMin(): 获取当前栈中的最小值。
初始化
self.st = [(0, inf)]
  • 初始化时栈中放入一个哨兵 (0, inf)
    • 0 是占位数,实际不用,避免栈为空的边界判断。
    • inf 是正无穷,表示最小值的初始值永远不会被使用。
    • 用一个 二元组 表示栈元素:(val, 当前最小值),这样可以实现 O(1) 取最小值。
push(val)
self.st.append((val, min(self.st[-1][1], val)))
  • 每次压入新值 val同时记录当前栈中的最小值
    • self.st[-1][1] 是栈顶记录的“之前”的最小值;
    • min(...) 是“当前”与“之前”最小值取更小的那个;
    • 所以每个栈元素都带着“当前入栈时的最小值”。
pop()
self.st.pop()
  • 弹出栈顶元素,直接 pop 即可;
  • 由于最小值是绑定在元素上的,所以不会丢失信息。
top()
return self.st[-1][0]
  • 返回栈顶的元素值。
getMin()
return self.st[-1][1]
  • 返回栈顶记录的当前最小值。

二、算法核心点(关键技巧)

✅ 核心技巧:栈中每个元素都附带一个当前最小值

这是本算法的关键优化 ——

  • 在入栈的时候,提前计算好每个状态下的最小值并存储下来;
  • 这样在 getMin() 的时候就能做到 O(1) 时间复杂度;
  • 所以不是每次动态去遍历栈找最小值,而是把“最小值随时间演变的轨迹”记录在每个节点中。

这种结构也被称为 “辅助栈思想” 的一种优化实现(实际上这里是“主栈 + 最小值绑定”)。

class MinStack:def __init__(self):# 这里的 0 写成任意数都可以,反正用不到self.st = [(0, inf)]  # 栈底哨兵def push(self, val: int) -> None:self.st.append((val, min(self.st[-1][1], val)))def pop(self) -> None:self.st.pop()def top(self) -> int:return self.st[-1][0]def getMin(self) -> int:return self.st[-1][1]

三、复杂度分析

时间复杂度(所有操作):
  • push: O(1)
  • pop: O(1)
  • top: O(1)
  • getMin: O(1)

因为每个操作都只涉及栈顶元素的访问或更新,无需遍历。

空间复杂度:
  • O(n),其中 n 是入栈的元素个数。
  • 每个元素都存储了一个 (val, 当前最小值) 的二元组,因此是线性空间。

总结

维度

说明

✅ 思路逻辑

每个入栈元素都记录当前最小值

✅ 核心技巧

元素与当前最小值打包记录,空间换时间

✅ 时间复杂度

所有操作均为 O(1)

✅ 空间复杂度

O(n),每个入栈值都额外记录一个最小值

如需我用图示说明这段栈在操作过程中的状态变化,也可以继续补充!

http://www.dtcms.com/wzjs/351485.html

相关文章:

  • 网络营销职业规划300字厦门seo新站策划
  • wordpress文章只允许投稿者浏览网站优化推广教程
  • 岳阳做网站如何做线上销售和推广
  • 网站建设工资一月多少谷歌seo关键词优化
  • 微商城 分销平台甘肃新站优化
  • 徐州做网站管理的公司哪个公司的网站制作
  • 做网站服务器用国外的网站创建的流程是什么
  • 企业网站建设比较调查怎么写有没有永久免费crm
  • qq在线网站代码google play下载安卓
  • 百度网站官网入口百度竞价推广代运营
  • 祁东网站建设优化大师人工服务电话
  • 小米发布会最新sem和seo是什么
  • 家教中介网站怎么做学员引流seo优化快速排名技术
  • 2022最近比较火的热点话题seo云优化
  • 南京建设人才网站百度文库个人登录入口
  • 手机免费制作软件下载杭州seo教程
  • 建设网站时 首先要解决两个问题 一是什么宿迁网站建设制作
  • 选择合肥网站建设seo外包服务方案
  • 怎样做网站seo优化内存优化大师
  • 金华app网站开发如何提升关键词的自然排名
  • 重庆网站建设行业新闻培训中心
  • 没有外网ip怎么做网站域名反查
  • wordpress autoblog搜索引擎优化seo论文
  • 有做喜糖的网站吗什么建站程序最利于seo
  • 深圳市建设局质监站官方网站推推蛙seo
  • 江西机场建设集团网站杭州小程序建设公司
  • 宿州做网站seo主要做什么
  • 企业建站找哪个公司长春网站制作系统
  • 叫人做网站后不提供源码品牌seo主要做什么
  • wordpress 动态网站模板seo做关键词怎么收费的