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

【常用的队列总结】

文章目录

  • 队列的介绍
    • Queue队列的基本概念与操作
    • 队列的基本概念
  • 常见的队列介绍
    • 非阻塞队列
      • LinkedList:
      • ArrayDeque:
      • PriorityQueue:
    • 阻塞队列
      • ArrayBlockingQueue
      • LinkedBlockingQueue
      • PriorityBlockingQueue
    • DelayQueue
      • SynchronousQueue

队列的介绍

Queue队列的基本概念与操作

在 Java 中,队列(Queue)是一种常见的数据结构,它按照先进先出(FIFO)的原则管理元素。队列通常用于在数据集合中添加元素,并按照它们被添加的顺序移除元素。Java 提供了丰富的队列实现,可以满足不同场景下的需求。

队列的基本概念

队列是一种线性数据结构,它有两个基本操作:入队(enqueue)和出队(dequeue)。入队将元素添加到队列的末尾,而出队则从队列的头部获取并移除元素。因此,队列的特点是先进先出,即最先入队的元素最先出队。

常见的队列介绍

非阻塞队列

LinkedList:

在这里插入图片描述
LinkedList 是 Java 中实现了 List 接口的类,它基于双向链表数据结构实现了列表的操作。除了实现了 List 接口之外,LinkedList 还实现了 Queue 接口,因此也可以用作队列。
LinkedList的特点:
1.双向链表结构:每个节点都包含指向前一个节点和后一个节点的引用,这使得在任意位置插入或删除元素的操作都是高效的。
2.非线程安全:LinkedList 不是线程安全的,如果需要在多线程环境中使用,需要通过额外的同步手段来保证线程安全性。
常用的方法:

添加元素:
add(E e): 将指定元素添加到列表末尾。
add(int index, E element): 在指定位置插入元素。
获取元素:
get(int index): 返回列表中指定位置的元素。
getFirst(): 返回列表中的第一个元素。
getLast(): 返回列表中的最后一个元素。
删除元素:
remove(): 移除并返回列表中的第一个元素。
remove(int index): 移除列表中指定位置的元素。
removeFirst(): 移除并返回列表中的第一个元素。
removeLast(): 移除并返回列表中的最后一个元素。
队列操作:
offer(E e): 将指定元素添加到队列的尾部。
poll(): 移除并返回队列的头部元素。
peek(): 返回队列的头部元素,但不移除。
判断元素是否存在:
contains(Object element):检查链表是否包含指定元素。
获取链表大小和清空链表:
size():获取链表中元素的个数。
isEmpty():检查链表是否为空。
clear():清空链表中的所有元素。
栈操作(LIFO):
push(E e): 将元素压入栈(等同于 addFirst(E e))。
pop(): 移除并返回栈顶元素(等同于 removeFirst())。

ArrayDeque:

在这里插入图片描述
ArrayDeque 是 Java 中实现了 Deque 接口的类,是一个基于数组的双端队列。它在两端进行插入和删除操作都非常高效,是实现栈和队列操作的理想选择。ArrayDeque 可以用作栈、队列或双端队列。
ArrayDeque的特点:
1.双端队列:可以在队列的两端进行添加和删除操作。
2.基于数组:内部使用数组来存储元素,初始容量可以动态调整。
3.无界队列:可以根据需要自动扩容,因此不限制大小。
4.线程不安全:不是线程安全的,在多线程环境中使用时需要外部同步。
5.高效:相比 LinkedList,ArrayDeque 的性能更高,因为它没有节点的额外开销。
常用方法:

添加元素:
addFirst(E e): 在队列头部添加元素。
addLast(E e): 在队列尾部添加元素。
offerFirst(E e): 在队列头部添加元素,返回 true 如果添加成功。
offerLast(E e): 在队列尾部添加元素,返回 true 如果添加成功。
获取元素:
getFirst(): 获取队列头部的元素。
getLast(): 获取队列尾部的元素。
peekFirst(): 获取但不移除队列头部的元素,返回 null 如果队列为空。
peekLast(): 获取但不移除队列尾部的元素,返回 null 如果队列为空。
删除元素:
removeFirst(): 移除并返回队列头部的元素。
removeLast(): 移除并返回队列尾部的元素。
pollFirst(): 移除并返回队列头部的元素,返回 null 如果队列为空。
pollLast(): 移除并返回队列尾部的元素,返回 null 如果队列为空。
栈操作(LIFO):
push(E e): 将元素压入栈(等同于 addFirst(E e))。
pop(): 移除并返回栈顶元素(等同于 removeFirst())。

PriorityQueue:

在这里插入图片描述
PriorityQueue 是 Java 中提供的一个基于优先级堆实现的队列,它可以确保每次出队(移除)操作总是返回队列中优先级最高的元素。它在需要频繁访问和删除优先级最高的元素的场景下非常有用。

PriorityQueue的特点:
1.基于堆:PriorityQueue 使用二叉堆(通常是最小堆)实现,能够提供对最小(或最大)元素的高效访问和删除。
2.自然顺序或自定义顺序:可以按照元素的自然顺序(实现 Comparable 接口)或通过指定的 Comparator 进行排序。
3.无界队列:默认情况下是无界的,但其内部容量会根据需要自动扩展。
4.线程不安全:不是线程安全的,如果在多线程环境中使用,需要额外的同步。
5.元素排序:插入元素后不会保持队列的顺序,但在访问时总是返回优先级最高的元素。
常用方法:

添加元素:
add(E e): 将指定元素插入优先级队列,若插入失败抛出异常。
offer(E e): 将指定元素插入优先级队列,返回 true 如果插入成功。
获取元素:
peek(): 返回队列头部的元素(优先级最高的元素),但不移除,如果队列为空返回 null。
删除元素:
poll(): 移除并返回队列头部的元素(优先级最高的元素),如果队列为空返回 nullremove(Object o): 从队列中移除指定元素。
其他操作:
size(): 返回队列中的元素数量。
isEmpty(): 检查队列是否为空。

阻塞队列

ArrayBlockingQueue

在这里插入图片描述
ArrayBlockingQueue 是 Java 中的一种阻塞队列实现,它基于数组并具有固定容量。它在队列满或队列空时会使得相应的插入或移除操作阻塞,是在生产者-消费者场景中常用的一个类。
特点:
1.固定容量:ArrayBlockingQueue 在创建时必须指定容量。
2.线程安全:内部使用锁和条件变量来控制并发访问,确保线程安全。
3.FIFO顺序:元素按先进先出(FIFO)的顺序进行插入和删除。
常用方法:

添加元素
add(E e): 将指定元素插入队列,如果队列已满,则抛出 IllegalStateExceptionoffer(E e): 将指定元素插入队列,如果队列已满,则返回 falseput(E e): 将指定元素插入队列,如果队列已满,则阻塞直到有可用空间。
获取元素
peek(): 获取队列头部的元素,但不移除,如果队列为空,则返回 nullpoll(): 获取并移除队列头部的元素,如果队列为空,则返回 nulltake(): 获取并移除队列头部的元素,如果队列为空,则阻塞直到有可用元素。
其他操作
size(): 返回队列中的元素数量。
isEmpty(): 检查队列是否为空。
remainingCapacity(): 返回队列剩余的可用容量。

LinkedBlockingQueue

在这里插入图片描述
LinkedBlockingQueue 是 Java 中的一种阻塞队列实现,它基于链接节点(链表)并且可以选择有界或无界。它在多线程环境下非常适合用来实现生产者-消费者模型,因为它支持阻塞的插入和移除操作。
特点:
1.有界或无界:可以在初始化时指定容量,未指定时默认最大容量为 Integer.MAX_VALUE。
2.线程安全:使用独立的锁来控制插入和删除操作,确保线程安全。
3.FIFO顺序:元素按先进先出(FIFO)的顺序进行插入和删除。
4.高吞吐量:由于插入和删除操作使用了独立的锁,可以在多线程环境中提供较高的吞吐量。
常用方法:

添加元素
add(E e): 将指定元素插入队列,如果队列已满,则抛出 IllegalStateExceptionoffer(E e): 将指定元素插入队列,如果队列已满,则返回 falseput(E e): 将指定元素插入队列,如果队列已满,则阻塞直到有可用空间。
offer(E e, long timeout, TimeUnit unit): 将指定元素插入队列,在指定时间内等待可用空间,如果队列已满且超时,则返回 false。
获取元素
peek(): 获取队列头部的元素,但不移除,如果队列为空,则返回 nullpoll(): 获取并移除队列头部的元素,如果队列为空,则返回 nulltake(): 获取并移除队列头部的元素,如果队列为空,则阻塞直到有可用元素。
poll(long timeout, TimeUnit unit): 获取并移除队列头部的元素,在指定时间内等待,如果队列为空且超时,则返回 null。
其他操作
size(): 返回队列中的元素数量。
isEmpty(): 检查队列是否为空。
remainingCapacity(): 返回队列剩余的可用容量。

PriorityBlockingQueue

在这里插入图片描述
PriorityBlockingQueue 是 Java 中的一种阻塞队列实现,它基于优先级堆实现,元素按自然顺序或指定的比较器顺序进行排序。与普通的阻塞队列不同,PriorityBlockingQueue 中的元素不是按照插入顺序进行处理,而是按照优先级顺序进行处理。这使得它非常适合需要处理优先级任务的场景。
特点:
1.无界队列:PriorityBlockingQueue 是一个无界队列,其容量为 Integer.MAX_VALUE。
2.线程安全:内部使用并发控制机制,确保多线程环境下的安全性。
3.元素排序:元素按自然顺序(通过 Comparable 接口)或指定的比较器进行排序。
4.阻塞操作:在获取元素时会阻塞直到有可用元素。
常用方法:

添加元素
add(E e): 将指定元素插入队列。
offer(E e): 将指定元素插入队列。
put(E e): 将指定元素插入队列(由于队列无界,此方法实际上不会阻塞)。
offer(E e, long timeout, TimeUnit unit): 将指定元素插入队列,等待指定时间(由于队列无界,此方法实际上不会阻塞)。
获取元素
peek(): 获取队列头部的元素,但不移除,如果队列为空,则返回 nullpoll(): 获取并移除队列头部的元素,如果队列为空,则返回 nulltake(): 获取并移除队列头部的元素,如果队列为空,则阻塞直到有可用元素。
poll(long timeout, TimeUnit unit): 获取并移除队列头部的元素,等待指定时间,如果队列为空且超时,则返回 null。
其他操作
size(): 返回队列中的元素数量。
isEmpty(): 检查队列是否为空。

DelayQueue

在这里插入图片描述
DelayQueue 是 Java 中的一种阻塞队列实现,它适用于在一段时间之后才能获取元素的场景。队列中的元素必须实现 Delayed 接口,并在指定的延迟期满之后才能从队列中获取到。这使得 DelayQueue 特别适用于实现任务调度和超时任务处理等功能。
特点:
1.无界队列:DelayQueue 是一个无界队列,其容量为 Integer.MAX_VALUE。
2.线程安全:内部使用并发控制机制,确保多线程环境下的安全性。
3.基于时间的排序:元素根据剩余的延迟时间进行排序,延迟时间最短的元素优先处理。
4.元素必须实现 Delayed 接口:队列中的元素需要实现 getDelay(TimeUnit unit) 和 compareTo(Delayed o) 方法。
常用方法:

添加元素
add(E e): 将指定元素插入队列。
offer(E e): 将指定元素插入队列。
put(E e): 将指定元素插入队列(由于队列无界,此方法实际上不会阻塞)。
offer(E e, long timeout, TimeUnit unit): 将指定元素插入队列,等待指定时间(由于队列无界,此方法实际上不会阻塞)。
获取元素
peek(): 获取队列头部的元素,但不移除,如果队列为空或头部元素的延迟时间未到,则返回 nullpoll(): 获取并移除队列头部的元素,如果队列为空或头部元素的延迟时间未到,则返回 nulltake(): 获取并移除队列头部的元素,如果队列为空或头部元素的延迟时间未到,则阻塞直到有可用元素。
poll(long timeout, TimeUnit unit): 获取并移除队列头部的元素,等待指定时间,如果队列为空或头部元素的延迟时间未到且超时,则返回 null。
其他操作
size(): 返回队列中的元素数量。
isEmpty(): 检查队列是否为空。

SynchronousQueue

在这里插入图片描述
SynchronousQueue 是 Java 中的一种特殊的阻塞队列实现,它没有内部容量或者缓冲区,每一个 put 操作必须等待一个对应的 take 操作,反之亦然。这意味着在 SynchronousQueue 中,元素只能在生产者和消费者线程之间直接传递。
特点:
1.无容量:SynchronousQueue 没有容量,无法缓存元素。
2.线程安全:内部使用并发控制机制,确保多线程环境下的安全性。
3.直接传递:每个插入操作必须等待一个移除操作,反之亦然。
4.适用于移交:特别适用于需要在线程之间移交任务的场景。
常用方法:

添加元素
put(E e): 将指定元素插入队列,如果没有相应的取出操作,则阻塞。
offer(E e): 将指定元素插入队列,如果没有相应的取出操作,则返回 falseoffer(E e, long timeout, TimeUnit unit): 将指定元素插入队列,等待指定时间,如果没有相应的取出操作,则返回 false。
获取元素
take(): 获取并移除队列中的元素,如果没有相应的插入操作,则阻塞。
poll(): 获取并移除队列中的元素,如果没有相应的插入操作,则返回 nullpoll(long timeout, TimeUnit unit): 获取并移除队列中的元素,等待指定时间,如果没有相应的插入操作,则返回 null。
其他操作
size(): 始终返回 0,因为 SynchronousQueue 不存储任何元素。

相关文章:

【常用的队列总结】

文章目录 队列的介绍Queue队列的基本概念与操作队列的基本概念 常见的队列介绍非阻塞队列LinkedList:ArrayDeque:PriorityQueue: 阻塞队列ArrayBlockingQueueLinkedBlockingQueuePriorityBlockingQueue DelayQueueSynchronousQueue 队列的介绍 Queue队列的基本概念与操作 在 …...

机器学习过拟合和欠拟合!看这一篇文章就够了 建议收藏!(上篇)

在机器学习中,有一项非常重要的概念,那就是:过拟合(Overfitting)和欠拟合(Underfitting)。 它们涉及到机器学习中常见的两种模型性能问题,分别表示模型在训练数据上表现得过于复杂或…...

关于阳光雨露外派联想的面试感想

最近在找工作,接到了一个阳光雨露外派联想的面试邀请。说实在的一开始就有不对劲的感觉。想必这就是大厂的自信吧,上就问能不能现场面试,然后直接发面试邀请。这时候我倒是没觉得有啥问题。 然后今天就去面试去了,住的比较偏&…...

深度神经网络介绍与实战

一、介绍 深度神经网络(Deep Neural Networks,DNNs)是一种强大的机器学习算法,被广泛应用于计算机视觉、自然语言处理、语音识别等领域。它是人工神经网络的一种扩展,包含多个隐藏层,每一层都由多个神经元组成。 与传统的机器学习算法相比,深度神经网络具有以下特点:…...

图解 Transformer

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…...

SpringCloud配置文件bootstrap不生效问题解决

解决方案&#xff1a; 情况一、SpringBoot 版本 小于 2.4.0 版本&#xff0c;添加以下依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-context</artifactId> </dependency> 情况二、SpringBoot…...

Java面试八股之自旋是什么意思

Java中的自旋是什么意思 自旋是多线程编程中的一种同步机制&#xff0c;尤其在Java中与锁的实现密切相关。当一个线程尝试获取某个锁&#xff08;如内置锁或显式锁&#xff09;时&#xff0c;如果锁已被其他线程持有&#xff0c;通常的做法是将该线程置于阻塞状态&#xff0c;…...

做好随时离开的准备:前一天还在为618加班到凌晨,第二天就被裁了

今日感悟 最近&#xff0c;一则令人唏嘘的新闻在网络上引起了广泛关注&#xff1a;一名员工前一天还在为618大促活动加班到凌晨&#xff0c;身心疲惫&#xff0c;然而第二天却收到了裁员通知&#xff0c;顿时陷入了失业的困境。 这则新闻不仅揭示了职场竞争的残酷现实&#xff…...

利用ESP32(Arduino IDE)向匿名上位机发送欧拉角

文章目录 一. 匿名上位机介绍二. 匿名协议说明1. 匿名协议官方说明文档2. 协议说明 三. 向匿名上位机发送数据(基于Arduino IDE的esp32)四. 运行效果 一. 匿名上位机介绍 匿名上位机官方介绍视频 匿名上位机官方下载 二. 匿名协议说明 1. 匿名协议官方说明文档 官方对于协…...

Java开发工具类(JDK、Hutool、Guava)

目录 Java开发常用的工具类1、JDK自带程序读取控制台输入内容&#xff08;调试程序或者学习的时候比较有用&#xff09;Arrays工具类 数组转集合Collections 集合工具类 排序Collections 集合工具类 查找Lambda表达式 操作集合 收集、转map、分组 2、Apache 的 commons-lang3 和…...

TCP协议的相关特性

目录 正文&#xff1a; 1.可靠性 2.连接管理 3.滑动窗口 4.流量控制 5.拥塞控制 6.延迟应答 7.捎带应答 总结&#xff1a; 正文&#xff1a; 1.可靠性 TCP协议是一个有连接&#xff0c;可靠传输&#xff0c;面向字节流&#xff0c;全双工的协议。其中可靠传输的实现…...

Lombok,一款超级强大的Java工具库

在软件开发过程中&#xff0c;繁琐的模板代码经常让开发者感到烦恼。 Lombok 是一款 Java 库&#xff0c;能够帮助开发者减少这些冗余代码&#xff0c;提高开发效率。本文将介绍 Lombok 的基本概念、安装和配置方法&#xff0c;以及如何在实际项目中使用它。 Lombok 是什么 L…...

FreeBSD下使用原生虚拟机管理器bhyve

hbyve简介 自 FreeBSD 10.0-RELEASE 起&#xff0c;BSD 许可的 bhyve 虚拟机管理器已成为底层系统不可或缺的一部分。bhyve 强大而灵活&#xff0c;支持多种客户机操作系统&#xff0c;涵盖 FreeBSD、OpenBSD 以及多个 Linux 发行版。在默认配置下&#xff0c;bhyve 提供对串行…...

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!

这段时间一直在搞文件上传相关的知识&#xff0c;正好把ctf的题目写了写&#xff0c;也算是给自字做个总结&#xff01; 不过ctf有一个缺点就是所有的测试全部是黑盒测试&#xff0c;无法从代码层面和大家解释&#xff0c;我找个时间把upload-labs靶场做一做给大家讲讲白盒的代…...

【学习记录】服务器转发使用tensorboard

场景 代码在服务器上运行&#xff0c;想使用tensorboard查看训练的过程。 但是服务器上不能直接访问地址&#xff0c;所以要转发端口到本地&#xff0c;从而在本地网页中能够打开tensorboard。 参考&#xff1a;https://zhuanlan.zhihu.com/p/680596384 这时我们需要建立本地…...

类型转换之显式转换

显式转换——>手动处理&#xff0c;强制转换 括号强转 作用&#xff1a;一般情况下&#xff0c;将高精度的类型转换为低精度。 语法&#xff1a;变量类型 变量名 &#xff08;变量类型&#xff09;变量; 注意&#xff1a;精度问题&#xff0c;范围问题。 括号强转&#x…...

Mybatis多表查询,报错:Column ‘id‘ in field list is ambiguous

错误原因&#xff1a; Mybatis 多表查询时&#xff0c;多个表有相同名字的字段&#xff0c;比如 id&#xff0c;名字重复&#xff0c;没有指定对应的表名。 有两个地方需要注意&#xff1a;(1)将其中一个重复字段的 Mybatis的 column 修改为其他的名字。(2)字段加上对应的表名…...

PyCharm面板ctrl+鼠标滚轮放大缩小代码

1.【File】➡【Settings】 2.点击【Keymap】&#xff0c;在右边搜索框中搜incre&#xff0c;双击出现的【Increase Font Size】 3.在弹出的提示框中选择【Add Mouse Shortcut】 4.弹出下面的提示框后&#xff0c;键盘按住【ctrl】&#xff0c;并且上滑鼠标滚轮。然后点击【O…...

【Qt】数据库(一)SQLITE创建、增删查改

填坑1&#xff1a;如何连续插入 汇总SQlite语句 创建表格&#xff1a;create table <table_name> (f1 type1, f2 type2,…); 增&#xff1a;insert into <table_name> values (value1, value2,…); 改&#xff1a;update <table_name> set <f1value1>,…...

【模拟面试问答】力扣165题:比较版本号(逐个比较与双指针法详解及模拟面试问答)

在本篇文章中&#xff0c;我们将详细解读力扣第165题“比较版本号”。通过学习本篇文章&#xff0c;读者将掌握如何使用多种方法来解决这一问题&#xff0c;并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释和ASCII图解&#xff0c;以便于理解。 问题描述 …...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...