队列的基础概念与经典题目(Leetcode题解-Python语言)

队列是先入先出后入后出)的数据结构,常用操作就 push 和 popleft,Python中用列表中的 pop(0) 或者 collection.deque的 popleft() 都可以。

普通队列

225. 用队列实现栈

class MyStack:def __init__(self):self.queue1 = []self.queue2 = []self.size = 0def push(self, x: int) -> None:self.size += 1self.queue1.append(x)def pop(self) -> int:# if self.empty():  题目中保证了不会 pop 空#     return Nonefor _ in range(self.size-1):self.queue2.append(self.queue1.pop(0))self.size -= 1self.queue1, self.queue2 = self.queue2, self.queue1return self.queue2.pop(0)def top(self) -> int:# if self.empty():#     return Nonereturn self.queue1[-1]def empty(self) -> bool:return self.size == 0

题目要求用两个队列实现栈,很简单,push 的操作是一样的,只不过在 pop 的时候不能 pop 队列最后一个元素,而要一直 pop 队首元素到另一个队列,只剩下的那一个元素即为栈顶元素,弹出它即可。显然用一个队列也能实现:

class MyStack:def __init__(self):self.queue = []def push(self, x: int) -> None:self.queue.append(x)def pop(self) -> int:# if self.empty():#     return Nonefor _ in range(len(self.queue)-1):self.queue.append(self.queue.pop(0))return self.queue.pop(0)def top(self) -> int:# if self.empty():#     return Nonereturn self.queue[-1]def empty(self) -> bool:return len(self.queue) == 0

346. 数据流中的移动平均值

class MovingAverage:def __init__(self, size: int):self.queue = []self.size = sizeself.sum = 0def next(self, val: int) -> float:if len(self.queue) < self.size:self.queue.append(val)else:self.sum -= self.queue[0]self.queue.pop(0)self.queue.append(val)self.sum += valreturn self.sum / len(self.queue)

这题是利用队列实现滑动窗口,窗口满了之后每次新加进来一个数 val,计数器 sum 就减去队首元素 queue[0],然后加上 val 即可。

622. 设计循环队列

class MyCircularQueue:def __init__(self, k: int):self.front = 0self.rear = 0self.size = k+1self.queue = [0 for _ in range(k+1)]def enQueue(self, value: int) -> bool:if self.isFull():return Falseelse:self.rear = (self.rear + 1) % self.sizeself.queue[self.rear] = valuereturn Truedef deQueue(self) -> bool:if self.isEmpty():return Falseelse:self.front = (self.front + 1) % self.sizereturn Truedef Front(self) -> int:return self.queue[(self.front + 1) % self.size] if not self.isEmpty() else -1def Rear(self) -> int:return self.queue[self.rear] if not self.isEmpty() else -1def isEmpty(self) -> bool:return self.front == self.reardef isFull(self) -> bool:return (self.rear + 1) % self.size  == self.front

设计循环队列的核心是对长度取余,特别是只对加 1 的情况取余,而除了队列为空时首尾指针一样,其余情况下尾指针都在首指针的左边。注意不要忘记判断队列空或者满的情况

优先队列

优先队列常用二叉堆实现,相应的题目见这篇博客。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跟我一起学.NetCore之中间件(Middleware)应用和自定义

前言Asp.NetCore中的请求管道是通过一系列的中间件组成的&#xff0c;使得请求会根据需求进行对应的过滤和加工处理。在平时开发中会时常引用别人定义好的中间件&#xff0c;只需简单进行app.Usexxx就能完成中间件的注册&#xff0c;但是对于一些定制化需求还得自己进行处理和封…

leetcode42. 接雨水

一:题目 二:上码 // class Solution { // public: // /**超时 // 思路: // 1.我们按列来计算 这就是表明的是 我们求取接雨水 向上的高度就是雨水量 // 但是这里的话我们的需要对雨水的高度 来进行判定 // 2.那么如何判定…

贪心的问题合集(Leetcode题解-Python语言)

贪心算法&#xff08;Greedy Algorithm&#xff09;&#xff1a;是一种在每次决策时采用当前状态下最优或最好的策略&#xff0c;从而希望导致结果是最好或最优的算法。 455. 分发饼干 class Solution:def findContentChildren(self, g: List[int], s: List[int]) -> int:…

Magicodes.IE之导入导出筛选器

总体设计Magicodes.IE是一个导入导出通用库&#xff0c;支持Dto导入导出以及动态导出&#xff0c;支持Excel、Word、Pdf、Csv和Html。在本篇教程&#xff0c;笔者将讲述如何使用Magicodes.IE的导入导出筛选器。在开始之前&#xff0c;我们需要先了解Magicodes.IE目前支持的筛选…

字符串经典题目(Leetcode题解-Python语言)

344. 反转字符串 class Solution:def reverseString(self, s: List[str]) -> None:"""Do not return anything, modify s in-place instead."""left 0right len(s) - 1while left < right:s[left], s[right] s[right], s[left]left 1…

谈了千百遍的缓存数据的一致性问题

“灵魂拷问保证缓存和数据库的一致性很简单吗&#xff1f;有哪些方式能保证缓存和数据库的一致性呢&#xff1f;如果发生了缓存和数据库数据不一致的情况怎么办呢&#xff1f;在上篇文章我们介绍了缓存的定义分类以及优缺点等&#xff0c;如果还没看的同学可以移步这里听说你会…

BS作业 基于springboot + Thymeleaf +mybatis 实现的书城管理系统

一:项目背景 项目描述 一个基本功能较为完整的后台管理项目。项目主要功能有&#xff1a;登录验证&#xff0c;登录功能还加入了随机验证码的验证&#xff1b; 用户注册&#xff0c;注册中密码基于srping 安全框架提供的加密(自动加盐)的密码储存方式&#xff0c;对注册重名进…

字符串匹配经典题目——KMP算法(Leetcode题解-Python语言)

28. 实现 strStr() strStr(haystack: str, needle: str) 的作用就是在 haystack 字符串&#xff08;长度为 n&#xff09;中找出 needle 字符串&#xff08;长度为 m&#xff09;出现的第一个位置&#xff08;下标从 0 开始&#xff09;。如果不存在&#xff0c;则返回 -1 &am…

Istio Pilot 源码分析(二)

张海东&#xff0c; ‍多点生活&#xff08;成都&#xff09;云原生开发工程师。本篇主要介绍 Pilot 源码中的 ServiceEntryStore 及其推送 xDS 的流程。本文为 Istio Pilot 源码分析系列的第二篇文章。Istio Pilot 源码分析&#xff08;一&#xff09;了解了 Pilot 源码的基本…

Pytorch中的 torch.Tensor() 和 torch.tensor() 的区别

直接在搜索引擎里进行搜索&#xff0c;可以看到官方文档中两者对应的页面&#xff1a; 分别点击进去&#xff0c;第一个链接解释了什么是 torch.Tensor&#xff1a; torch.Tensor 是一个包含单一数据类型元素的多维矩阵&#xff08;数组&#xff09;。 正因为 torch.Tensor 只包…

leetcote34. 在排序数组中查找元素的第一个和最后一个位置

一:题目 二&#xff1a;上码&#xff08;暴力二分&#xff09; // class Solution { // public: // /** // 思路:1.首先这是一个升序的 那么相同的一定是会相连的// */// vector<int> searchRange(vector<int>& nums, int target) {// …

Git 图形化操作之合并提交记录

Git 图形化操作之合并提交记录独立观察员 2020 年 9 月 24 日目录1、显示日志2、合并提交记录3、推送合并的提交前言&#xff1a;当我们使用 Git 时&#xff0c;有时会遇到刚提交推送完一次修改&#xff0c;发现漏了该某处&#xff0c;只好又提交推送一次&#xff0c;这样在提交…

Pytorch中的 torch.as_tensor() 和 torch.from_numpy() 的区别

之前我写过一篇文章&#xff0c;比较了 torch.Tensor() 和 torch.tensor() 的区别&#xff0c;而这两者都是深拷贝的方法&#xff0c;返回张量的同时&#xff0c;会在内存中创建一个额外的数据副本&#xff0c;与原数据不共享内存&#xff0c;所以不受原数据改变的影响。 这里…

chrome禁止三方cookie,网站登录不了怎么办

背景新版chrome(80)浏览器默认屏蔽所有三方cookie已经不是什么新闻了&#xff0c;具体原因这里不去深究&#xff0c;有大量相关文章介绍&#xff0c;由于目前许多网站都依赖三方cookie&#xff0c;因此该特性的推出还是造成了一些的影响&#xff0c;比如收集用户信息的广告商&a…

leetcode69. x 的平方根

一:题目 二:上码 class Solution { public:/**思路:1.因为我们的 ans的平方 < x 那么我们就可以用二分法来做 不断缩小左右范围来确定 ans**/int mySqrt(int x) {int left 0; int right x;int ans 0;while (left < right) {long mid (right-left)/2 left;if (mid*…

两数、三数、四数之和相关题目(Leetcode题解-Python语言)

作为 Leetcode 的第一题&#xff0c;两数之和自然是知名度最高的&#xff0c;从两数之和出发也有不少的衍生题目&#xff0c;下面就让我们好好地解决它们。 1. 两数之和 class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:record dict()for i…

初识ABP vNext(11):聚合根、仓储、领域服务、应用服务、Blob储存

点击上方蓝字"小黑在哪里"关注我吧聚合根仓储领域服务BLOB储存应用服务单元测试模块引用前言在前两节中介绍了ABP模块开发的基本步骤&#xff0c;试着实现了一个简单的文件管理模块&#xff1b;功能很简单&#xff0c;就是基于本地文件系统来完成文件的读写操作&…

leetcode367. 有效的完全平方数

一:题目 二:上码 class Solution { public:/**完全平方数:若一个数能表示成某个整数的平方的形式&#xff0c;则称这个数为完全平方数思路:1.我们将num先折半,因为它是某个整数的平方&#xff0c;而这个数的范围肯定不会超过num的一半2.那么这就相当于在[left,num/2]中查找某个…

二叉树最近公共祖先相关题目(Leetcode题解-Python语言)

236. 二叉树的最近公共祖先 class Solution:def lowestCommonAncestor(self, root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:def dfs(root: TreeNode, p: TreeNode, q: TreeNode):# 如果当前节点为空&#xff0c;则说明 p、q 不在 node 的子树中&#xff0c;不可…