Python 中的队列/ 双端队列 / 针对于leetcode相关题目队列的使用/ 如何在leetcode中使用队列功能

引言 leetcode中队列的使用

在leetcode上,我们经常会使用队列这个功能,初学者一般都是用列表来当做队列使用。
即list.append() 当做队列的push功能,list.pop(0)当做队列的pop()功能,
但是我们知道list.pop(0)的时间复杂度是O(n),在leetcode提交的时候,可能会让你的运行时间变长。所以我们看到的题解很多都是用python自带的双端队列deque来实现队列的功能。

下面我们介绍一下python中如何直接使用队列和双端队列

1. 队列

1.1什么队列

鉴于大家应该都知道队列的特性,我不在这儿过多介绍,不了解的可以看一下这篇文章,只需了解队列的含义即可。
参考链接:队列(Queue)

1.2 Python 中的队列/ 介绍leetcode中常用的队列功能

本文章只介绍在leetcode上常用的队列功能,详细的队列对象功能可以参考官方文档:
队列库/类的官方文件 参考Queue部分即可

常用功能

名称 功能
a = Queue() 创建队列实例
Queue.qsize() 返回队列的长度(大小)
Queue.empty() 判断队列是否为空,为空返回:True,不为空返回:Fasle
Queue.put(value) 将value填加到队列尾部
Queue.get() 移除队列的首项,并返回该值

使用实例

from queue import Queue

a = Queue()  # 创建队列实例
# 添加元素
a.put(1)
a.put(2)


# 弹出元素
print(a.get()) #  1
print(a.get()) # 2

# 判断是否为空

print(a.empty()) # True

# 添加一个元素之后,再判断
a.put(3)
print(a.empty()) # False

# 获得长度
print(a.qsize()) # 1

2 双端队列

我发现题解中,主要用的是双端队列,但其实使用的功能就是队列的功能,不知道为什么,也写写功能吧…

2.1 什么是双端队列

简单来说就是,尾部可以添加、弹出元素,队首也可以添加、弹出元素,并且复杂度都是O(1)
具体怎么实现的,我们没有必要去了解了。leetcode中使用时,也只是使用弹出队首值,加入队尾值的操作,即基本队列的功能,对于队首添加元素和队尾弹出元素的功能是不使用的。

2.2 Python中的双端队列/ 双端队列的使用(只介绍leetcode上常用的)

本文只介绍基本的、常在leetcode上用的功能,详细的功能请参考:
Python中的双端队列
官方文档:deque

基本功能

名称 功能
a = Queue(可迭代对象) 创建双端队列,不添加默认新队列为空
deque.append(x) 添加 x 到右端。[leetcode上常把双端队列的右侧作为队尾]
deque.popleft() 移除最左侧元素,并返回该值。【leetcode上把左侧作为队首】
deque.appendleft() 添加 x 到左端。
deque.pop() 移去最右侧元素并且返回一个元素。
len(deque) 返回长度
deque 在判断时,为空的时候表示False,不为空表示True。类似于判断列表为空

※ 表示用常用功能

创建双端队列

from collections import deque

a = deque() # 创建一个空的双端队列
print(a) # deque([])

# 如果想创建双端队列的时候,添加元素,要传入可迭代对象
# a = deque(1) # 报错
a = deque([1]) # 放在列表中就好了
print(a)  # deque([1])

添加首尾元素(和list类似)


a.append("right")
a.appendleft("left")

print(a)
-----------------------------
打印的结果:
deque(['left', 1, 'right'])

弹出首尾元素

print(a.pop(),a.popleft())
---------------------------
打印结果:
right left

查看长度 && 判断是否为空

print(len(a))
a.popleft() # 将最后一个元素弹出

if a:
    print('长度不为0')
else:
    print('长度为0')
-------------------
输出结果
1
长度为0

3 参考文献

队列(Queue)
Python中的双端队列
官方文档:deque

你可能感兴趣的:(Python,库/函数使用,python,leetcode,开发语言,数据结构)