首页 > 其他分享 >day01

day01

时间:2023-04-01 10:33:39浏览次数:48  
标签:min 队列 day01 pop stk push public

剑指 Offer 09. 用两个栈实现队列

leetcode传送门
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

分析:

栈是操作受限的线性表, 只能在一端插入和删除元素,具有先进后出的特性。
队列同样也是操作受限的线性表, 只能在一端插入, 在另一端删除元素,具有先进先出的特性。
通过分析栈和队列这两种数据结构的特性, 我们可以用两个栈来模拟实现一个队列,

java代码实现

class CQueue {
        Deque<Integer> stk = new LinkedList();
        Deque<Integer> stk_sup = new LinkedList();

        public CQueue() {
        }

        public void appendTail(int value) {
            while(!stk_sup.isEmpty()) stk.push(stk_sup.pop());
            stk.push(value);
        }

        public int deleteHead() {
            while (!stk.isEmpty()) stk_sup.push(stk.pop());
            if(stk_sup.isEmpty()) return -1;
            return stk_sup.pop();
        }
}

剑指 Offer 30. 包含min函数的栈

包含min函数的栈

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。

分析

动态维护一个最小栈

java代码实现

class MinStack {

      private Deque<Integer> stk = new LinkedList();
      private Deque<Integer> stk_min = new LinkedList();

      public MinStack() {
//            stk_min.push(Integer.MAX_VALUE);
      }

      public void push(int x) {
          stk.push(x);
          if(stk_min.isEmpty() || x < stk_min.peek())  stk_min.push(x);
          else stk_min.push(stk_min.peek());
      }

      public void pop() {
          stk.pop();
          stk_min.pop();
      }

      public int top() {
          return stk.peek();
      }

      public int min() {
          return stk_min.peek();

      }
  }

标签:min,队列,day01,pop,stk,push,public
From: https://www.cnblogs.com/tswinter3/p/17274875.html

相关文章

  • Markdown学习Day01
    标题设置#号加空格加标题=一级标题两个#号加空格加标题=二级标题以此类推到追多第六级标题    字体*Hello,world*      (两边加一个星号=......
  • Day01 JS整数是怎么表示的 | 面试打卡365
    知识讲解系统+全面万能的NumberJavaScript内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1与1.0是相同的,是同一个数。做一个实验typeof1//numbertypeof......
  • day01入门
    java入门常识快捷方式:本质上链接到了真正的程序上,使用方便;环境变量:环境变量是操作系统中的一个配置,专门用来配置路径的,配置到环境变量中的路径,可以在任何地方访问或使用......
  • day01
    Markdown学习标题(一级标题)#+空格+标题名字(二级标题)##+空格+标题名字字体HELLO变粗体俩变加俩*HELLO变斜体俩边加一·*HELLO斜体加粗脸部3*HELLO俩边俩~引......
  • Day01 1.2、HTML基础
    一、HTMLHyperTextMarkupLanguage,译作超文本标记语言,是一门标记语言,不是编程语言。所以它没有变量,也没有任何语句结构。所谓的超文本,就是超越了文本范畴的文档格......
  • JavaSE-day01(面向对象高级)
    面向对象的核心:设计对象来处理数据,解决问题。一、静态static读作静态,可以用来修饰成员变量,也能修饰成员方法。1.1static修饰成员变量Java中的成员变量按有无static修......
  • day01-SpringBoot基本介绍
    SpringBoot基本介绍1.SpringBoot是什么?官网地址:https://spring.io/projects/spring-boot学习文档:https://docs.spring.io/spring-boot/docs/2.7.10-SNAPSHOT/reference......
  • day01
    day011.JavaScript介绍JavaScript是什么JavaScript是一种运行在客户端(浏览器)的变成语言,实现人机交互效果。作用:网页特效表单验证数据交互服务端编程(nodejs)组成......
  • SpringMVC-day01
    SpringMVC-day01SpringMVC,底层是把Servlet、Filter、Listener再次封装课程内容SpringMVC介绍请求与响应RESTful风格请求交互SSM整合(注解版)拦截器学习目标掌握......
  • Spring-day01
    Spring-day01#前置课程1.javase 1).面向对象:封装,继承,多态(面向接口) 2).反射 3).动态代理2.javaweb 1).servlet编程规范 2).网络编程3.数据库 1).......