📜  哪些Python模块可用于竞争性编程?

📅  最后修改于: 2021-06-26 23:59:17             🧑  作者: Mango

在上一篇文章中,我们讨论了C++, Java和Python是竞争性编程的三种最常见的语言。

在本文中,我们将从竞争性编程和面试准备的角度重点介绍最重要的Python模块。

list :动态大小的数组,允许在不关心数组大小的情况下进行插入和删除。它还具有纯数组的优点,例如随机访问和缓存友好性。列表也可以用作队列和堆栈。

deque Dequeue支持在O(1)时间内在两端进行插入和删除。由于它是使用数组实现的,因此它也允许随机访问。我们可以使用出队来同时实现Queue和Stack。关于Deque的示例问题是,访问所有的汽油泵和所有大小为k的子阵列的最大值。

请注意, Python中没有用于QueueStack的模块。我们可以使用list或deque实现它们首选双端队列实现,尤其是对于队列,因为在列表前面进行插入/删除很慢。

在我们希望具有FIFO项目顺序的情况下,队列很有用。问题示例包括:生成具有给定数字的数字,流中的第一个非重复字符,树及其变化的层级遍历,图形及其变化的BFS。请参阅队列练习问题以获取更多练习。

在我们希望获得LIFO订单的情况下使用堆栈。示例问题包括平衡括号,股票跨度问题,直方图中的下一个更大的元素和最大的面积。请参阅堆栈练习问题以获取更多练习。

dict :这两个都实现散列。当我们有键集合时,我们使用set。当我们有键值对时,我们使用字典。当我们希望快速搜索,插入和删除(所有三个操作均为O(1))时很有用。这是该行业中最常用的数据结构之一,也是学术界最低估的数据结构。存在许多流行的问题,计数不同的元素,数组项的频率,具有0和的子数组以及两个未排序数组的并集和交集。请参阅散列练习问题以获取更多练习

heapq :默认情况下实现Min Heap。我们也可以创建一个Min Heap。只要我们希望有效地找到最小或最大元素,就使用它。它用于实现流行的算法,例如Prim算法,Dijkstra最短路径,霍夫曼编码,K个最大元素,可购买和合并K个排序数组的最大玩具,流的中位数。请参阅堆练习问题以获取更多练习。

sorted :对列表等序列进行排序。基于排序的示例问题包括:合并重叠间隔,所需的最小平台。第K个最小元素,找到具有给定总和的三元组。请参阅排序实践问题以获取更多信息。

bisect :用于二进制搜索。基于二进制搜索的示例问题是,找到第一次出现的索引,出现的次数,峰值元素,二进制排序数组的中位数。请参阅二进制搜索实践问题以获取更多信息。

注意:与C++ STL和Java集合不同。 Python标准库确实包含Self Balancing BST的实现。在Python,我们可以使用bisect模块来保留一组排序后的数据。我们还可以使用PyPi模块,例如rbtree(红黑树的实现)和pyavl(AVL树的实现)。

我们将在本文的下一部分介绍更重要的Python库。

如果您是Python的初学者,则可能要尝试Python初学者的免费课程