数据结构与算法-队列

2023-11-16

  • 定义
    队列是ListInsert发生表尾、ListDelete发生在表头的线性表,主要操作:入队、出队。在这里插入图片描述

  • 术语
    表头-队头,表尾-队尾,插入-入队,删除-出队

  • 特点

  1. 先入先出(FIFO)
  2. 插入的位置是length+1,删除的位置的是1,一般读取第1个数据元素

循环队列(Circular Queue)

顺序队列的假溢出问题

在这里插入图片描述

队列上溢出
  • 真上溢:队列真正满时再入队。
  • 假上溢:rear已指向队尾,但队列前端仍有空位置。
  • 解决假上溢的方法
    方法一:每次删除队头一个元素后,把整个队列往前移一个位置(造成时间浪费)。
    方法二:使用循环队列方法二:使用循环队列
循环队列-基本思想
  • 首位相连:把a[0]和a[5]想象成邻居

在这里插入图片描述

循环队列-满与空的判定

循环队列空和满,队头和队尾相连,如何区分?
在这里插入图片描述

解决方法
  1. 另外设置一个标志,以区别队空、队满;
  2. 少用一个元素空间
    队空:front = = rear
    队满:(rear+1)%M = = front

在这里插入图片描述

优先队列(Priority Queue)

优先队列是正常入,按照优先级出的队列。

实现机制
  • Heap(Binary,Binomial,Fibonacci)
  • Binary Search Tree

小顶堆(Mini Heap)
在这里插入图片描述
大顶堆(Max Heap)

在这里插入图片描述

各种堆实现的时间复杂度对比图
在这里插入图片描述

java.util.PriorityQueue

java.util.PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。
参考:https://www.cnblogs.com/CarpenterLee/p/5488070.html

LeetCode[703]Kth largest Element in a Stream
description

Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element.

Your KthLargest class will have a constructor which accepts an integer k and an integer array nums, which contains initial elements from the stream. For each call to the method KthLargest.add, return the element representing the kth largest element in the stream.

Example

int k = 3;
int[] arr = [4,5,8,2];
KthLargest kthLargest = new KthLargest(3, arr);
kthLargest.add(3); // returns 4
kthLargest.add(5); // returns 5
kthLargest.add(10); // returns 5
kthLargest.add(9); // returns 8
kthLargest.add(4); // returns 8

Note

You may assume that nums’ length ≥ k-1 and k ≥ 1.

code
class KthLargest {
final PriorityQueue<Integer> q;
    final int k;
    
    public KthLargest(int k, int[] a) {
        this.k = k;
        q = new PriorityQueue<>(k);
        for (int n : a)
            add(n);
    }

    public int add(int n) {
        if (q.size() < k)
            q.offer(n);
        else if (q.peek() < n) {
            q.poll();
            q.offer(n);
        }
        return q.peek();
    }
}

/**
 * Your KthLargest object will be instantiated and called as such:
 * KthLargest obj = new KthLargest(k, nums);
 * int param_1 = obj.add(val);
 */

运行结果:
在这里插入图片描述

阻塞队列(Blocking queue)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构与算法-队列 的相关文章

  • 将二叉树转为有序的双向链表

    一 题目要求 输入一棵二叉排序树 现在要将该二叉排序树转换成一个有序的双向链表 而且在转换的过程中 不能创建任何新的结点 只能调整树中的结点指针的指向来实现 include
  • PCL—低层次视觉—点云分割(RanSaC)

    点云分割 点云分割可谓点云处理的精髓 也是三维图像相对二维图像最大优势的体现 不过多插一句 自Niloy J Mitra教授的Global contrast based salient region detection出现 最优分割到底鹿死
  • findBug 错误修改指南

    FindBugs错误修改指南 1 EC UNRELATED TYPES Bug Call to equals comparing different types Pattern id EC UNRELATED TYPES type EC c
  • JavaScript实现数据结构 -- 链表

    文章目录 链表 链表的特点 链表和数组的区别 JS模拟链表 遍历链表 插入节点 删除节点 链表应用 删除链表中的节点 leetcode 237 思路 代码 反转链表 leetcode 206 思路 代码 链表 链表和数组一样是有多个元素组成
  • 栈(Stack)——class Stack 和 class Stack T 实现

    对于Stack类的实现 跟之前链表实现也一样 只是封装成为面向对象的类了 PS 这里是线式存储的类和模板实现 链表式的实际上写法也是一样的 class Stack代码如下 mystack h include
  • DDP入门

    DDP 即动态动态规划 可以用于解决一类带修改的DP问题 我们从一个比较简单的东西入手 最大子段和 带修改的最大子段和其实是常规问题了 经典的解决方法是用线段树维护从左 右开始的最大子段和和区间最大子段和 然后进行合并 现在我们换一种方法来
  • 递归算法中的时间复杂度分析

    对于一种算法的时间复杂度分析还是特别重要的 在一些非递归算法中 我们仅仅看运算次数最多的那一行代码可能执行多少次就可以 实际就是看在循环中变量的变化 但是对于递归算法中该怎么分析呢 下面介绍几种递归函数中的算法时间复杂度分析的方法 0 递推
  • 亚利桑那州立大学周纵苇:研习 U-Net ——现有的分割网络创新

    雷锋网AI研习社按 经典的 Encoder Decoder 结构在目标分割问题中展现出了举足轻重的作用 然而这样一个相对固定的框架使得模型在感受野大小和边界分割精度两方面很难达到兼顾 本次公开课 讲者以 U Net 为案例分析 总结现有的分
  • 『Python基础-15』递归函数 Recursion Function

    什么是递归函数 一种计算过程 如果其中每一步都要用到前一步或前几步的结果 称为递归的 用递归过程定义的函数 称为递归函数 例如连加 连乘及阶乘等 凡是递归的函数 都是可计算的 即能行的 递归就是一个函数在它的函数体内调用它自身 编程语言中的
  • 以太坊系列之十五: 以太坊数据库

    以太坊数据库中都存了什么 以太坊使用的数据库是一个NOSQL数据库 是谷歌提供的开源数据leveldb 这里尝试通过分析以太坊数据库存储了什么来分析以太坊可能为我们提供哪些关于区块链的API 存储内容 NOSQL是一个key value数据
  • OJ-合并两个有序链表

    题目描述 代码如下 Definition for singly linked list struct ListNode int val struct ListNode next struct ListNode mergeTwoLists s
  • 数理统计知识整理——回归分析与方差分析

    题记 时值我的北科研究生第一年下 选学 统计优化 课程 备考促学 成此笔记 以谨记 1 线性回归 1 1 原理分析 要研究最大积雪深度x与灌溉面积y之间的关系 测试得到近10年的数据如下表 使用线性回归的方法可以估计x与y之间的线性关系 线
  • 时间复杂度+常见复杂度解释

    前言 算法的效率 虽然计算机能快速的完成运算处理 但实际上 它也需要根据输入数据的大小和算法效率来消耗一定的处理器资源 要想编写出能高效运行的程序 我们就需要考虑到算法的效率 算法的效率主要由以下两个复杂度来评估 时间复杂度 评估执行程序所
  • 机器学习算法GBDT的面试要点总结-上篇

    1 简介 gbdt全称梯度提升决策树 在传统机器学习算法里面是对真实分布拟合的最好的几种算法之一 在前几年深度学习还没有大行其道之前 gbdt在各种竞赛是大放异彩 原因大概有几个 一是效果确实挺不错 二是即可以用于分类也可以用于回归 三是可
  • 八大排序算法(六)——优先队列、堆和堆排序

    6 1 API 优先队列是一种抽象数据类型 它表示了一组值和对这些值的操作 优先队列最重要的操作就是删除最大元素和插入元素 6 2 初级实现 6 2 1 数组实现 无序 或许实现优先队列最简单方法就是基于下压栈的代码 insert 方法的代
  • 基数排序代码实现

    详情请看排序总结 传送门 https blog csdn net m0 52711790 article details 121914543 基数排序的知识点我就不贴出来 相信都能搜到对应概念解释 下面就直接上代码 代码解释其实也很清晰了
  • 雪糕的最大数量 排序+贪心

    雪糕的最大数量 雪糕的最大数量 题目描述 样例 数据范围 思路 代码 题目描述 夏日炎炎 小男孩 Tony 想买一些雪糕消消暑 商店中新到 n 支雪糕 用长度为 n 的数组 costs 表示雪糕的定价 其中 costs i 表示第 i 支雪
  • 用两个栈实现队列

    目录 一 栈的基本结构及其接口 二 我的队列结构定义 三 我的队列创建及其初始化 四 我的队列入队 五 我的队列出队 六 我的队列取队头元素 七 我的队列判空 八 我的队列销毁 一 栈的基本结构及其接口 栈的结构定义 typedef int
  • Leetcode2661. 找出叠涂元素

    Every day a Leetcode 题目来源 2661 找出叠涂元素 解法1 哈希 题目很绕 理解题意后就很简单 由于矩阵 mat 中每一个元素都不同 并且都在数组 arr 中 所以首先我们用一个哈希表 hash 来存储 mat 中每
  • 【数据结构】单链表的定义和操作

    目录 1 单链表的定义 2 单链表的创建和初始化 3 单链表的插入节点操作 4 单链表的删除节点操作 5 单链表的查找节点操作 6 单链表的更新节点操作 7 完整代码 嗨 我是 Filotimo 很高兴与大家相识 希望我的博客能对你有所帮助

随机推荐

  • Building Simulation Packet-Loss System in Channel

    Step 1 Produce a series of random frame numbers There is three input GOP and loss ratio For instance there is a 264 with
  • json文件怎么写注释

    1 使用编辑器打开json文件 现在是没有注释内容的 如果没有的话需要下载安装 2 一个json文件 其实就是一个js脚本文件 我们可以使用 的单行注释符 3 也可以使用 符号来支持多行注释 4 我们可以使用重复定义的方法来添加注释 jso
  • 微信小程序:分享一个百度地图微信小程序api

    分享一个百度地图微信小程序api http lbsyun baidu com index php title wxjsapi 使用也比较简单 天气就是以前车辆网的api 支持https 免费 支持POI查询 默认返回生活服务 美食 酒店三种
  • 柯洁终结神秘AI棋手41连胜 表示信心大增今夜未眠

    大型年度AI人物评选 2017中国AI英雄风云榜 评选进行中 奖项设置 技术创新人物TOP 10 商业创新人物TOP 10 表彰人物 华人科学家 学者 企业家 创业者 评委阵容 资深媒体人 AI投资人 AI专业机构等 颁奖 2017年12月
  • selenium官文文档阅读总结(day 3)

    1 关联型xpath的用法 driver find element By XPATH a text xxx ancestor 祖先元素的标签名 2 selenium等待 等待的作用 在系统运行的过程中 等待网页内容的加载显示 需要耗费的时间
  • 华为校招机试 - 工单调度策略(Java)

    题目描述 当小区通信设备上报警时 系统会自动生成待处理的工单 华为工单调度系统需要根据不同的策略 调度外线工程师 FME 上站修复工单对应的问题 根据与运营商签订的合同 不同严重程度的工单被处理并修复的时长要求不同 这个要求被修复的时长我们
  • 使用Go语言爬取网页并将其保存为图片

    要使用Go语言爬取网页并将其保存为图片 你可以使用Go的第三方库来实现 以下是一个使用chromedp库的示例代码 它使用Chrome浏览器的Headless模式来访问网页并截取屏幕截图 package main import contex
  • Mrtk 如何动态开启关闭网格渲染

    protected void Show IMixedRealityDataProviderAccess dataProviderAccess CoreServices SpatialAwarenessSystem as IMixedReal
  • Unity编辑器随机生成物体,更换场景之后物体丢失问题解决

    前言 obj GameObject PrefabUtility InstantiatePrefab configData bigMainScene 我在编辑器开发的时候实例化预制体到场景中之后 在跳转场景之后 然后在返回实例化过物体的场景会
  • 【Ansible自动化运维实战】使用Asible批量部署yum仓库

    Ansible自动化运维实战 使用Asible批量部署yum仓库 一 时间要求及目的 二 playbook内容 三 运行palybook 一 时间要求及目的 使用华为镜像源作为yum仓库批量分发达到所有受控端 二 playbook内容 ro
  • 【成电860考研】电子科技大学软件工程860考研专业课真题考频总结

    博主最近考研上岸啦 成电软件工程860专业课考了122 总分不高 这篇文章主要介绍专业课 我就不分享别的啦 博主考研的时候收集了几乎全网的资料 找到了几乎所有能找到的860资料进行汇总分析 得到了最后的真题考频 为了帮助学弟学妹们 博主决定
  • 4261. 孤独的照片

    数据范围为500 000 所以应该控制在O nlogn 或O n 我们发现要枚举的子串它其中有一个字母只出现一次 所以 我们可以去枚举只出现一次的字母是哪个 假设在第i个位置的字母为G 我们要枚举包含这个字母的 且只包含一个G的 且长度大于
  • QGroupBox布局中简单的操作

    QGroupBox中布局各个控件的使用 注意 我是先用了Qt designer设计 然后根据转成的 py文件代码 进行适当修改得到的 将进行三个示例讲解 目录 QGroupBox上添加栅格布局 某一组件充满整个QGroupBox QGrou
  • 抖音小程序实践三:接口开发指南

    通过官方文档可以更系统的学习到所有的接口 我这边罗列一下我自己用到测试过的接口供大家参考 前端 小程序对接官方文档 https microapp bytedance com docs zh CN mini app develop api o
  • RDMA技术详解——DMA和RDMA概念

    1 1 DMA DMA Direct Memory Access 直接内存访问 是一种能力 允许在计算机主板上的设备直接把数据发送到内存中去 数据搬运不需要CPU的参与 如下图所示 红线部分为传统内存访问 需要通过CPU进行数据copy来移
  • python导入数学函数_Python 数学函数模块(Math)

    1 内置的数学函数 min 和max 函数可用于查找可迭代的最小值或最大值 例如 x min 5 10 25 y max 5 10 25 print x print y abs 函数返回指定数字的绝对 正 值 例如 x abs 7 25 p
  • 微信小程序之 navigateTo

    navigateTo页面跳转传参 使用标签的方式跳转 变量需要 A页面
  • UE-从鼠标出进行射线检测

    第一种方式 Convert Mouse Location To World Space 将鼠标屏幕2D位置转换为场景空间3D位置和方向 将鼠标位置从2D转换成3D 第二种方式 Deprohiect Screen to World 将给定的2
  • 自动化驱动程序管理

    在部署操作系统时 每次都从下载和分发所需的驱动程序中实现真正的独立性可能是一场艰苦的战斗 特别是具有硬件多样化的环境 并且需要支持新的硬件类型时 借助 OS Deployer 可以对所有端点使用一个映像 无论品牌和型号如何 驱动程序将自动处
  • 数据结构与算法-队列

    定义 队列是ListInsert发生表尾 ListDelete发生在表头的线性表 主要操作 入队 出队 术语 表头 队头 表尾 队尾 插入 入队 删除 出队 特点 先入先出 FIFO 插入的位置是length 1 删除的位置的是1 一般读取