题目链接:https://leetcode.cn/problems/number-of-students-unable-to-eat-lunch/

题目描述:

学校的自助午餐提供圆形和方形的三明治,分别用数字 01 表示。所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的。
餐厅里三明治的数量与学生的数量相同。所有三明治都放在一个 里,每一轮:

  • 如果队列最前面的学生 喜欢 栈顶的三明治,那么会 拿走它 并离开队列。
  • 否则,这名学生会 放弃这个三明治 并回到队列的尾部。

这个过程会一直持续到队列里所有学生都不喜欢栈顶的三明治为止。

给你两个整数数组 studentssandwiches ,其中 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

解法:堆栈 + 模拟

使用两个堆栈studentsStack 和sandwichesStack分别来模拟学生队列和三明治队列。当队首元素相同时,都推出队首元素,开始比较下一个队首元素。否则,让学生队列的队首移动到队尾,继续比较,直到所有元素都匹配不上或者所有元素都已出栈,退出循环,studentsStack 最后剩余的大小就是无法吃午餐的学生数量。

代码:

class Solution {public int countStudents(int[] students, int[] sandwiches) {Deque<Integer> studentsStack = new ArrayDeque<>();Deque<Integer> sandwichesStack = new ArrayDeque<>();for (int student : students) {studentsStack.offerLast(student);}for (int sandwich : sandwiches) {sandwichesStack.offerLast(sandwich);}boolean flag = true;while (!sandwichesStack.isEmpty() && flag) {flag = false;int len = studentsStack.size();while (!studentsStack.isEmpty() && len-- > 0) {if(sandwichesStack.peekFirst() == studentsStack.peekFirst()) {sandwichesStack.pollFirst();studentsStack.pollFirst();flag = true;} else {studentsStack.offerLast(studentsStack.pollFirst());}}}return sandwichesStack.size();}
}

1700. 无法吃午餐的学生数量(难度:简单)相关推荐

  1. LeetCode 1700. 无法吃午餐的学生数量:真假模拟(极简代码) + 奇技淫巧

    [LetMeFly]1700.无法吃午餐的学生数量:真假模拟(极简代码) + 奇技淫巧 力扣题目链接:https://leetcode.cn/problems/number-of-students-u ...

  2. LeetCode 1700. 无法吃午餐的学生数量(队列模拟 / 不模拟)

    文章目录 1. 题目 2. 解题 1. 题目 学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示. 所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的. 餐厅里三明治的数量与 ...

  3. 1700. 无法吃午餐的学生数量

    学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示.所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的. 餐厅里三明治的数量与学生的数量相同.所有三明治都放在一个 栈 里,每 ...

  4. Leetcode1700. 无法吃午餐的学生数量[C++题解]:模拟题简单,用queue

    文章目录 题目分析 题目链接 补充 Queue的操作 题目分析 题意重述:排队领食物,食物2种属性:学生有唯一偏好.如果学生看到食物队头是自己喜欢吃的,拿走:如果学生看到食物队头不是自己喜欢吃的,掉头 ...

  5. 【无法吃午餐的学生数量】

    题目描述 学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示.所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的. 餐厅里三明治的数量与学生的数量相同.所有三明治都放在一个 ...

  6. 无法吃午餐的学生数量

    题目链接 无法吃午餐的学生数量 题目描述 注意 students.length == sandwiches.length 两个数组中的元素都要么为0,要么为1 解答思路 学生的位置可变,三明治的位置不 ...

  7. [猴子摘桃 ]有一只猴子,摘了很多桃子,每天吃下全部桃子数量一半+1, 第十天吃完之后发现还剩下1个,问:最初摘了多少

    解析:第一天的桃子数量等于第二天的桃子数量加一乘以二,以此类推. package com.homework;public class Demo17 {public static void main(S ...

  8. 13. 找出数组中重复的数字【难度: 简单 / 知识点: 模拟】

    13. 找出数组中重复的数字[难度: 简单 / 知识点: 模拟] 方法一: map 计数 时间复杂度O(nlongn) 空间复杂度多了一个二叉树 class Solution {public:int ...

  9. php中表单输出成绩,js内置对象处理_打印学生成绩单的简单实现

    任务: 1.通过js的内置对象得到当前日期 var date=new Date(); var year=date.toString().slice(11,15); document.write(yea ...

最新文章

  1. .net程序员的盲点(八):泛型
  2. RHEL5搭建apache服务器全过程(四)配置heartbeat和ipvsadm
  3. Cloud for Customer的前台请求是怎么发送到后台的
  4. POJ2186-Popular Cows(流行的奶牛)【tarjan,强连通分量,图论】
  5. python定义对象的比较方法
  6. LeetCode 326. 3的幂
  7. java中解决组件重叠的问题(例如鼠标移动组件时)
  8. PHP定时抽奖怎么实现的,PHP 实现抽奖逻辑
  9. centos查看历史指令记录_CentOS清除SSH登录记录、历史命令及日志缓存
  10. python3迭代器和可迭代对象,Python3学习(8)--迭代,可迭代的和迭代器
  11. 最新web打印控件 破解版 下载地址
  12. 网络化智能型维修电工电气控制技能实训智能考核装置
  13. 分布式与微服务☞web组件kafka
  14. android 电视 竖屏 黑边 -平板,竖视频转换成横视频,要求画面满屏不变形及没有黑边(解决方案)...
  15. 微信内置浏览器缓存清理 微信缓存清除 清除微信里的h5缓存
  16. 为什么“蜥蜴书”是机器学习入门必读书?
  17. python王者荣耀刷金币
  18. 给自己一个不断学习的理由
  19. 秃顶之路-Day11
  20. map和multimap的详解(C++)

热门文章

  1. dd和cp命令的区别
  2. 大数据公司又被查,爬虫程序员在内20余人被抓!
  3. PHP+Mysql服装商城 网上服装购物商城 基于PHP服装商城的系统设计与实现(2)分类
  4. Springboot毕设项目创意摄影交流平台sek0o(java+VUE+Mybatis+Maven+Mysql)
  5. autohotkey-鼠标
  6. 【Python】推导式(列表推导式、元组推导式、字典推导式、集合推导式)详解
  7. python中的sympy模块求导和解方程
  8. Android中的自定义View以及绘图工具
  9. javascript 补全字符串的几种方法
  10. 360chunqiu2017_smallest —— 从例题理解SROP