一道使用LinkedList和Stack解决的算法题
一、无法吃午餐的学生数量
学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示。所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的。
餐厅里三明治的数量与学生的数量相同。所有三明治都放在一个 栈 里,每一轮: 如果队列最前面的学生 喜欢 栈顶的三明治,那么会 拿走它并离开队列。 否则,这名学生会 放弃这个三明治 并回到队列的尾部。 这个过程会一直持续到队列里所有学生都不喜欢栈顶的三明治为止。
给你两个整数数组 students 和 sandwiches ,其中 sandwiches[i] 是栈里面第 i 个三明治的类型(i = 0
是栈的顶部), students[j] 是初始队列里第 j 名学生对三明治的喜好(j = 0是队列的最开始位置)。
请你返回无法吃午餐的学生数量。 提示: 1 <= students.length, sandwiches.length<= 100
students.length == sandwiches.length sandwiches[i] 要么是 0 ,要么是 1 。 students[i] 要么是 0 ,要么是 1。
示例:
输入:students = [1,1,0,0], sandwiches => [0,1,0,1] 输出:0
解释: 最前面的学生放弃最顶上的三明治,并回到队列的末尾,学生队列变为 students = [1,0,0,1]。 最前面的学生放弃最顶上的三明治,并回到队列的末尾,学生队列变为 students = [0,0,1,1]。
最前面的学生拿走最顶上的三明治,剩余学生队列为 students = [0,1,1],三明治栈为 sandwiches = [1,0,1]。
最前面的学生放弃最顶上的三明治,并回到队列的末尾,学生队列变为 students = [1,1,0]。
最前面的学生拿走最顶上的三明治,剩余学生队列为 students = [1,0],三明治栈为 sandwiches = [0,1]。
最前面的学生放弃最顶上的三明治,并回到队列的末尾,学生队列变为 students = [0,1]。
最前面的学生拿走最顶上的三明治,剩余学生队列为 students = [1],三明治栈为 sandwiches = [1]。
最前面的学生拿走最顶上的三明治,剩余学生队列为 students = [],三明治栈为 sandwiches = []。
所以所有学生都有三明治吃。
二、代码
public static int countStudents(int[] students, int[] sandwiches) {// 由于学生可以从队列头部删除和添加到队尾,则用LinkedList存储合适// 三明治依次从栈顶取出,则用Stack存储合适Deque<Integer> dequeList = new LinkedList<>();Stack<Integer> stack = new Stack<>();for (int i = 0; i < students.length; i++) {dequeList.add(students[i]);// 由于三明治存储在栈中,则将原始sandwiches数组倒序存入,这样取出时候才是原始sandwiches顺序stack.push(sandwiches[sandwiches.length - i - 1]);}while (!dequeList.isEmpty() && !stack.isEmpty() && dequeList.contains(stack.peek())) {if (!dequeList.peekFirst().equals(stack.peek())) {// 移除队列头部元素,将其添加至尾部Integer tempFirst = dequeList.poll();dequeList.offer(tempFirst);} else {// 移除队列头部元素,移除栈顶元素dequeList.removeFirst();stack.pop();}}return dequeList.size();}
相关文章:
一道使用LinkedList和Stack解决的算法题
一、无法吃午餐的学生数量 学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示。所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的。 餐厅里三明治的数量与学生的数量相同。所有三明治都放在一个 栈 里,每一轮&#…...
通用外设-W25Q64
前言 一、SPI通信 二、W25Q64基初时序 1.各种命令代码 2.代码 1.写使能指令 2.读取芯片是否忙碌状态并等待 3.写入数据 4.擦除函数操作 5.读取代码 三.验证 四.擦除说明 总结 前言 在单片机中一般32K FLASH就够用了,但是当我们使用图片或其他大量数据时…...
Spring MVC MVC介绍和入门案例
1.SpringMVC概述 1.1.MVC介绍 MVC是一种设计模式,将软件按照模型、视图、控制器来划分: M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为两类: 一类称为数据承载Bean…...
android使用ndk开发
ndk ndk sdk要单独下载和android sdk不同 https://developer.android.google.cn/ndk/downloads?hl=zh-cn 解压后添加ndk路径到path即可 gradle gradle下载太慢使用国内镜像 distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-6.7.1-all.zip 执行gradlew.ba…...
行为型设计模式——模板方法模式
学习难度:⭐ ,比较常用 模板方法模式 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知࿰…...
曲面上偏移命令的查找
今天学习老王的SW绘图时,遇到一个命令找不到,查询了一会终于找到了这个命令,防止自己忘记,特此记录一下,这个命令就是“曲面上偏移”,网上好多的教程都是错误的,实际上这个命令没有在曲面里面&a…...
世邦spon IP网络对讲广播系统任意文件上传漏洞
产品介绍 世邦通信IP网络对讲广播系统采用领先的IPAudio™技术,将音频信号以数据包形式在局域网和广域网上进行传送,是一套纯数字传输系统。 漏洞描述 spon IP网络对讲广播系统存在任意文件上传漏洞,攻击者可以通过构造特殊请求包上传恶意后门文件,从…...
mp4文件全部转换为mp3
问题 今天突发奇想,想把mp4视频转换为mp3来收听,于是想到了ffmpeg工具 步骤 安装ffmpeg环境 要在 Windows 上配置 FFmpeg 环境,你可以按照以下步骤进行操作: 下载 FFmpeg: 首先,你需要下载 FFmpeg 的 W…...
深信服技术认证“SCSA-S”划重点:逻辑漏洞
为帮助大家更加系统化地学习网络安全知识,以及更高效地通过深信服安全服务认证工程师考核,深信服特别推出“SCSA-S认证备考秘笈”共十期内容,“考试重点”内容框架,帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信服…...
Linux grep命令教程:强大的文本搜索工具(附案例详解和注意事项)
Linux grep命令介绍 grep (Global Regular Expression Print)命令用来在文件中查找包含或者不包含某个字符串的行,它是强大的文本搜索工具,并可以使用正则表达式进行搜索。当你需要在文件或者多个文件中搜寻特定信息时,grep就显得无比重要啦…...
网络安全的威胁PPT
建议的PPT免费模板网站:http://www.51pptmoban.com/ppt/ 此PPT模板下载地址:https://file.51pptmoban.com/d/file/2023/03/20/1ae84aa8a9b666d2103f19be20249b38.zip 内容截图:...
CUDA驱动深度学习发展 - 技术全解与实战
全面介绍CUDA与pytorch cuda实战 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士&…...
如何做用户分层和标签体系
“活动作了一场接一场,简直要累死了,拉进来的客户也没有多少,投入产出完全不成比例,怎么办?“ “有那么多注册用户,但是GMV怎么才这么点,他们怎么不买啊,难道都是羊毛党?…...
Vue+Element Ui实现el-table自定义表头下拉选择表头筛选
用vueelement ui开发管理系统时,使用el-table做表格,当表格列过多的时候,想要做成可选表头的,实现表格列的筛选显示,效果如下: 代码文件结构: 废话不多说,直接上代码: 第…...
使用Java连接MongoDB (6.0.12) 报错
报错: Exception in thread "main" com.mongodb.MongoCommandException: Command failed with error 352: Unsupported OP_QUERY command: create. 上图中“The client driver may require an upgrade”说明了“客户端驱动需要进行升级”,解…...
数学建模day16-预测模型
本讲首先将介绍灰色预测模型,然后将简要介绍神经网络在数据预测中的应用,在本讲的最 后,我将谈谈清风大佬对于数据预测的一些看法。 注:本文源于数学建模学习交流相关公众号观看学习视频后所作 目录 灰色系统 GM(1,1)…...
Vue3响应式系统(一)
一、副作用函数。 副作用函数指的是会产生副作用的函数。例如:effect函数会直接或间接影响其他函数的执行,这时我们便说effect函数产生了副作用。 function effect(){document.body.innerText hello vue3 } 再例如: //全局变量let val 2f…...
MStart | MStart开发与学习
MStart | MStart开发与学习 1.学习 1.MStart |开机LOG显示异常排查及调整...
GoZero微服务个人探索之路(一)Etcd:context deadline exceeded原因探究及解决
产生错误原因就是与etcd交互时候需要指定: 证书文件的路径 客户端证书文件的路径 客户端密钥文件的路径 (同时这貌似是强制默认就需要指定了) 但我们怎么知道这三个文件路径呢,如下方法 1. 找到etcd的配置文件,里…...
C语言从入门到实战——结构体与位段
结构体与位段 前言一、结构体类型的声明1.1 结构体1.1.1 结构的声明1.1.2 结构体变量的创建和初始化 1.2 结构的特殊声明1.3 结构的自引用 二、 结构体内存对齐2.1 对齐规则2.2 为什么存在内存对齐2.3 修改默认对齐数 三、结构体传参四、 结构体实现位段4.1 什么是位段4.2 位段…...
Unity视频控制器架构:延迟播放、事件总线与多视频管理
1. 为什么Unity原生VideoPlayer总在关键时刻“掉链子”做Unity视频播放功能时,我踩过最深的坑,不是画质模糊、不是音画不同步,而是——它根本不像个“控制器”。你拖一个VideoPlayer组件到场景里,调用Play(),它就播&am…...
如何快速掌握Apache Camel:企业集成模式实战指南
如何快速掌握Apache Camel:企业集成模式实战指南 【免费下载链接】camelinaction2 :camel: This project hosts the source code for the examples of the Camel in Action 2nd ed book :closed_book: written by Claus Ibsen and Jonathan Anstey. 项目地址: htt…...
CompressO:重新定义本地视频压缩的三大创新维度
CompressO:重新定义本地视频压缩的三大创新维度 【免费下载链接】compressO Convert any video/image into a tiny size. 100% free & open-source. Available for Mac, Windows & Linux. 项目地址: https://gitcode.com/gh_mirrors/co/compressO 当…...
瑞德克斯在不同终端的使用体验如何?语言覆盖广不广?
瑞德克斯在不同终端的使用体验如何?语言覆盖广不广?面向全球客户的金融服务平台,多语言能力是基础项。瑞德克斯支持多种主流语言,让客户在自己熟悉的语言环境中完成所有操作,这种细节让平台显得格外友好。瑞德克斯的多…...
Kubernetes成本优化与资源管理:降低云原生基础设施成本
Kubernetes成本优化与资源管理:降低云原生基础设施成本 一、成本优化概述 Kubernetes成本优化是通过合理配置资源、优化调度策略、选择合适的实例类型等方式,降低云原生基础设施的运营成本。 1.1 成本组成 成本类型说明优化方向计算成本CPU、内存资源…...
卖电机怎么找客户?下游工厂在哪里
卖电机找客户,本质是找用电机的下游工厂,核心难点是拿到这些下游厂的名单和联系方式。展会遇到的多半是同行,百度搜来的多半是询价投机客,真正批量采购电机的工厂躲在各地产业带里,不主动露面。这篇从下游映射、传统渠…...
GetQzonehistory:如何永久保存你的QQ空间记忆
GetQzonehistory:如何永久保存你的QQ空间记忆 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾在深夜翻看QQ空间,突然发现那些记录着青春点滴的说说正在逐…...
高斯过程回归与离散变分原理:数据驱动的物理结构发现
1. 项目概述:当高斯过程回归遇见离散变分原理在物理信息机器学习这个交叉领域,我们常常面临一个核心挑战:如何从有限的、可能带有噪声的观测数据中,不仅还原出物理系统的动态,还能揭示其背后深刻的数学结构?…...
全域轨迹可回溯,高效破解煤矿灾害搜救难题 ——基于视频孪生无感定位的矿山轨迹溯源搜救技术解析方案
全域轨迹可回溯,高效破解煤矿灾害搜救难题——基于视频孪生无感定位的矿山轨迹溯源搜救技术解析方案一、方案前言煤矿井下瓦斯爆炸、顶板垮塌、透水冲击等灾害发生后,巷道结构损毁、通信供电中断、有害气体弥漫,现场环境瞬息万变。传统人员监…...
3个步骤解锁《塞尔达传说:旷野之息》终极存档编辑器
3个步骤解锁《塞尔达传说:旷野之息》终极存档编辑器 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 想象一下,当你在海拉鲁大陆冒险时&…...
