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

日本做a网站360网站推广官网

日本做a网站,360网站推广官网,免费注册网站空间,做网站还能挣钱文章目录 1. 问题描述2. 核心要求3. 实现思路双栈同步法 4. 完整代码实现5. 复杂度分析6. 总结与优化方向方法优势优化方向适用场景 1. 问题描述 设计一个支持 push、pop、top 操作,并能在 常数时间 内检索到最小元素的栈。要求所有操作的时间复杂度均为 O(1)。 示…

文章目录

    • 1. 问题描述
    • 2. 核心要求
    • 3. 实现思路
      • 双栈同步法
    • 4. 完整代码实现
    • 5. 复杂度分析
    • 6. 总结与优化方向
      • 方法优势
      • 优化方向
      • 适用场景

1. 问题描述

设计一个支持 pushpoptop 操作,并能在 常数时间 内检索到最小元素的栈。要求所有操作的时间复杂度均为 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

2. 核心要求

  • 功能要求:实现栈的基本操作,并高效获取最小值。
  • 时间复杂度:所有操作(push, pop, top, getMin)必须为 O(1)。
  • 空间复杂度:尽可能优化,但允许使用额外空间。

3. 实现思路

双栈同步法

通过维护两个栈实现功能:

  1. 主栈 (stack):存储所有元素。
  2. 辅助栈 (minStack):存储每个主栈状态下的最小值,与主栈同步操作。

关键操作

  • 入栈 (push):主栈压入元素,辅助栈压入当前最小值。
  • 出栈 (pop):主栈和辅助栈同步弹出栈顶元素。
  • 最小值查询 (getMin):直接访问辅助栈顶元素。

同步原理
每次入栈时,辅助栈记录当前主栈的最小值;出栈时,辅助栈同步弹出元素,确保其栈顶始终是主栈当前的最小值。


4. 完整代码实现

import java.util.Deque;
import java.util.LinkedList;class MinStack {private Deque<Integer> stack;      // 主栈:存储所有元素private Deque<Integer> minStack;   // 辅助栈:存储每个状态的最小值public MinStack() {stack = new LinkedList<>();minStack = new LinkedList<>();}public void push(int val) {stack.push(val);// 辅助栈压入当前最小值:若栈为空,当前值为最小;否则与栈顶比较if (minStack.isEmpty()) {minStack.push(val);} else {minStack.push(Math.min(minStack.peek(), val));}}public void pop() {stack.pop();minStack.pop();  // 同步弹出辅助栈顶元素}public int top() {return stack.peek();  // 返回主栈顶元素}public int getMin() {return minStack.peek();  // 返回辅助栈顶元素(当前最小值)}
}

5. 复杂度分析

  • 时间复杂度:所有操作均为 O(1),直接访问栈顶元素。
  • 空间复杂度:O(n),其中 n 为操作次数。辅助栈与主栈大小相同,最坏情况下存储所有元素的最小值。

6. 总结与优化方向

方法优势

  • 直观易懂:双栈同步操作逻辑清晰,代码简洁。
  • 严格满足时间复杂度要求:所有操作均在常数时间内完成。

优化方向

  1. 空间优化:辅助栈可以不存储所有状态的最小值,而是当新值 ≤ 当前最小值时才压入辅助栈。弹出时,仅当主栈顶等于辅助栈顶时才弹出辅助栈顶。
    示例
    public void push(int val) {stack.push(val);if (minStack.isEmpty() || val <= minStack.peek()) {minStack.push(val);}
    }public void pop() {if (stack.pop().equals(minStack.peek())) {minStack.pop();}
    }
    
    优点:减少辅助栈空间占用。
    缺点:代码复杂度稍高,需处理对象相等性问题(如使用 Integer 时需用 equals 比较)。

适用场景

  • 对时间复杂度要求严格,且可接受额外空间的场景。
  • 需要快速获取最小值的栈结构设计问题。
http://www.dtcms.com/wzjs/439325.html

相关文章:

  • 网站建设前台后台教程外贸google推广
  • 合肥建站方案湖南今日新闻最新头条
  • 简历模板做的最好的是哪个网站网络推广公司电话
  • 中英企业网站模板网站建设策划书范文
  • 设计常用网站大学生网页设计作业
  • 建设招标项目常挂网站有哪些seo网络推广经理招聘
  • linux做网站教程win7优化大师下载
  • 工信部网站备案平台友情链接教程
  • 网站建设中的pv指的是啥cpa推广联盟平台
  • 南昌哪里可以做电商网站合肥全网优化
  • 手机app软件开发长沙网站优化培训
  • ps做图下载网站有哪些seo排名工具给您好的建议下载官网
  • 成都网站建设哪家seo的英文全称是什么
  • wordpress 忘记密码沧州网站优化公司
  • 做网站如何赢利的百度指数快刷软件
  • wordpress 菜单栏高亮怎么seo网站排名
  • wordpress防止垃圾用户seo搜索优化是什么呢
  • 电脑上怎么做网站公司运营策划方案
  • 有哪些做设计交易网站有哪些内容百度推广客户端怎么登陆
  • 张家港做网站多少钱网络营销的现状分析
  • 网站联系客服是怎么做的网站平台推广
  • 邯郸网站建你对网络营销的理解
  • 做自己的网站需要什么seo推广专员招聘
  • 在人才网站做业务看到招聘游戏推广员千万别去
  • 服务好的微网站建设鞍山seo公司
  • 安徽省淮南市城乡建设委员会网站今天最新的新闻头条新闻
  • 织梦网站问题建网站建设
  • wordpress 用微信登陆天津seo博客
  • 大屏网站做响应百度认证平台官网
  • 做网站和微信公众平台如何定价宁波seo推广服务