【无法吃午餐的学生数量】
题目描述
学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示。所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的。
餐厅里三明治的数量与学生的数量相同。所有三明治都放在一个 栈 里,每一轮:如果队列最前面的学生 喜欢 栈顶的三明治,那么会 拿走它 并离开队列。
否则,这名学生会 放弃这个三明治 并回到队列的尾部。
这个过程会一直持续到队列里所有学生都不喜欢栈顶的三明治为止。给你两个整数数组 students 和 sandwiches ,其中 sandwiches[i] 是栈里面第 i 个三明治的类型(i = 0 是栈的顶部), students[j] 是初始队列里第 j 名学生对三明治的喜好(j = 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 = []。
所以所有学生都有三明治吃。
示例 2:输入:students = [1,1,1,0,0,1], sandwiches = [1,0,0,0,1,1]
输出:3提示:1 <= students.length, sandwiches.length <= 100
students.length == sandwiches.length
sandwiches[i] 要么是 0 ,要么是 1 。
students[i] 要么是 0 ,要么是 1 。
解题思路
- 这道题目有多种实现方式,比如:栈、双端队列、计数,但是核心思路就是根据题目的意思进行模拟。
- 实现思路1:选用双端队列来实现会更加容易,但是,我们需要注意的是结束条件,结束条件:当我们的所有学生都没有拿到栈顶的面包,此时直接return,此时需要去维护一个变量,判断它的值是否与此时队列的长度是否相等。
- 实现思路2:因为学生在队列的相对位置不影响整个过程,我们只需要记录队列剩余的学生中0的个数,以及1的个数,只要当前学生中0或者1的数量大于0,就减减,否则,直接break,最后直接return
返回0和1的数量。
实现代码
实现方式一:队列
class Solution {public int countStudents(int[] students, int[] sandwiches) {Deque<Integer> stu=new LinkedList<>();for(int i=students.length-1;i>=0;i--){stu.addFirst(students[i]);}int t=0,index=0;while(!stu.isEmpty()){if(t==stu.size()){return stu.size();}int student = stu.pollFirst();if(student==sandwiches[index]){t=0;index++;}else{stu.addLast(student);t++;}}return 0;}
}
实现方式2:计数
class Solution {public int countStudents(int[] students, int[] sandwiches) {int cnt1=Arrays.stream(students).sum();int cnt0=students.length-cnt1;for(int i=0;i<sandwiches.length;i++){if(sandwiches[i]==0&&cnt0>0){cnt0--;}else if(sandwiches[i]==1&&cnt1>0){cnt1--;}else{break;} }return cnt0+cnt1;}
}
运行结果
【无法吃午餐的学生数量】相关推荐
- Leetcode1700. 无法吃午餐的学生数量[C++题解]:模拟题简单,用queue
文章目录 题目分析 题目链接 补充 Queue的操作 题目分析 题意重述:排队领食物,食物2种属性:学生有唯一偏好.如果学生看到食物队头是自己喜欢吃的,拿走:如果学生看到食物队头不是自己喜欢吃的,掉头 ...
- LeetCode 1700. 无法吃午餐的学生数量(队列模拟 / 不模拟)
文章目录 1. 题目 2. 解题 1. 题目 学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示. 所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的. 餐厅里三明治的数量与 ...
- 1700. 无法吃午餐的学生数量
学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示.所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的. 餐厅里三明治的数量与学生的数量相同.所有三明治都放在一个 栈 里,每 ...
- 1700. 无法吃午餐的学生数量(难度:简单)
题目链接:https://leetcode.cn/problems/number-of-students-unable-to-eat-lunch/ 题目描述: 学校的自助午餐提供圆形和方形的三明治,分 ...
- 无法吃午餐的学生数量
题目链接 无法吃午餐的学生数量 题目描述 注意 students.length == sandwiches.length 两个数组中的元素都要么为0,要么为1 解答思路 学生的位置可变,三明治的位置不 ...
- LeetCode 1700. 无法吃午餐的学生数量:真假模拟(极简代码) + 奇技淫巧
[LetMeFly]1700.无法吃午餐的学生数量:真假模拟(极简代码) + 奇技淫巧 力扣题目链接:https://leetcode.cn/problems/number-of-students-u ...
- [猴子摘桃 ]有一只猴子,摘了很多桃子,每天吃下全部桃子数量一半+1, 第十天吃完之后发现还剩下1个,问:最初摘了多少
解析:第一天的桃子数量等于第二天的桃子数量加一乘以二,以此类推. package com.homework;public class Demo17 {public static void main(S ...
- 吉林大学计算机学院校区环境,吉林大学,6个校区7个校园,占地面积最大,学生数量最多!...
吉林大学简称"吉大",位于吉林省省会长春,是教育部直属.中央直管副部级建制的全国重点大学,国家"双一流"."211工程"."985 ...
- mysql统计每周每个学校新增学生数量_深入学习之mysql(四)聚合函数
聚合函数:COUNT统计记录的条数.SUM求和函数.AVG求平均值.MAX求最大值.MIN求最小值 一.COUNT练习: 1.统计学校一共有多少个学生: mysql> SELECT COUNT( ...
最新文章
- (转)记忆杭州中的(非杭户籍人)
- 禅道设置bug模板_JPress v3.0 beta.2 发布,修复 bug 和完善产品细节
- 顺序队列相关操作(C语言实现)
- gitlab开启https加密 and 全站https
- Xamarin.Forms教程下载安装Xamarin.iOS
- Quartz框架架构
- Qtum量子链AUR开发工具包即日上线
- linux下printf语句执行时间,linux下printf中\n刷新缓冲区的疑问(已解决)
- 2016科学数据大会临时通知
- linux定时器tinner,第三章 套接字相关数据结构--基于Linux3.10
- 月租最便宜的手机卡_有什么价格便宜,月租少,流量多,并且可以从旧套餐转入的手机卡推荐?...
- n进制快速转化成10进制
- 吉首大学第十届“新星杯”大学生程序设计大赛(暨新生网络同步赛)
- erp是企业内部最重要的使用程序,它对日常运作至关重要
- 基础30讲 第11讲 多元函数微分学
- IP数据包在网络中的传输过程
- GDP越高就越幸福吗?用Python分析《世界幸福指数报告》后我们发现…
- java中定义byte数组,浅谈java的byte数组的不同写法
- 剑指offer练习日志02:基于矩阵乘法求斐波那契数列通项
- 【背包dp】自然数拆分Lunatic版
热门文章
- UE游戏制作记录(一、ik动画重定向)
- 什么是XML?什么是XML数字签名?
- Android开发 之 线性渲染 LinearGradient
- counter counters 计数器
- 友友车友软件 android,友友车友模拟学车软件2013 v4.0最新版(图文)
- android java kindle_Kindle和Android开发的比较:Java实现
- JAVA刷网站流量的技术研究总结
- Juniper防火墙系列-04-Juniper防火墙IPSec VPN的配置
- 小马识途谈如何利用全网营销打造营销闭环
- 博洛尼亚大学计算机科学,2021QS世界大学学科排名重磅发布!意大利大学详细上榜排名,不容错过!...