程序员面试金典 - 面试题 03.06. 动物收容所(队列)
1. 题目
动物收容所。有家动物收容所只收容狗与猫,且严格遵守“先进先出”的原则。
在收养该收容所的动物时,收养人只能收养所有动物中“最老”(由其进入收容所的时间长短而定)的动物,或者可以挑选猫或狗(同时必须收养此类动物中“最老”的)。
换言之,收养人不能自由挑选想收养的对象。请创建适用于这个系统的数据结构,实现各种操作方法,比如enqueue、dequeueAny、dequeueDog
和dequeueCat
。允许使用Java内置的LinkedList数据结构。
enqueue
方法有一个animal
参数,animal[0]
代表动物编号,animal[1]
代表动物种类,其中 0 代表猫,1 代表狗。dequeue*
方法返回一个列表[动物编号, 动物种类]
,若没有可以收养的动物,则返回 [-1,-1]。
示例1:输入:
["AnimalShelf", "enqueue", "enqueue", "dequeueCat", "dequeueDog", "dequeueAny"]
[[], [[0, 0]], [[1, 0]], [], [], []]输出:
[null,null,null,[0,0],[-1,-1],[1,0]]示例2:输入:
["AnimalShelf", "enqueue", "enqueue", "enqueue", "dequeueDog", "dequeueCat", "dequeueAny"]
[[], [[0, 0]], [[1, 0]], [[2, 1]], [], [], []]输出:
[null,null,null,null,[2,1],[0,0],[1,0]]说明:
收纳所的最大容量为20000
2. 解题
- 第一个参数
animal[0]
就是时间,小的表示时间早
class AnimalShelf {queue<vector<int>> dog;queue<vector<int>> cat;vector<int> ans;
public:AnimalShelf() {}void enqueue(vector<int> animal) {if(animal[1] == 0)cat.push(animal);elsedog.push(animal);}vector<int> dequeueAny() {if(!dog.empty() && cat.empty())return dequeueDog();else if(dog.empty() && !cat.empty())return dequeueCat();else if(dog.empty() && cat.empty())return {-1,-1};else{if(dog.front()[0] < cat.front()[0])return dequeueDog();return dequeueCat();}}vector<int> dequeueDog() {if(!dog.empty()){ans = dog.front();dog.pop();return ans;}return {-1,-1};}vector<int> dequeueCat() {if(!cat.empty()){ans = cat.front();cat.pop();return ans;}return {-1,-1};}
};
程序员面试金典 - 面试题 03.06. 动物收容所(队列)相关推荐
- 程序员面试金典面试题 01.06. 字符串压缩
前言 本系列文章为<程序员面试金典>刷题笔记. 题目位置:字符串压缩 题集:程序员面试金典 题目 字符串压缩.利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能.比如,字符串a ...
- 程序员面试金典 - 面试题 17.06. 2出现的次数(找递推规律)
1. 题目 编写一个方法,计算从 0 到 n (含 n) 中数字 2 出现的次数. 示例: 输入: 25 输出: 9 解释: (2, 12, 20, 21, 22, 23, 24, 25)(注意 22 ...
- 程序员面试金典 - 面试题 03.05. 栈排序(两栈)
1. 题目 栈排序. 编写程序,对栈进行排序使最小元素位于栈顶. 最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中. 该栈支持如下操作:push.pop.peek 和 ...
- 程序员面试金典 - 面试题 16.06. 最小差(排序+双指针)
1. 题目 给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差 示例: 输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, ...
- 程序员面试金典 - 面试题 04.06. 后继者(循环中序遍历)
1. 题目 设计一个算法,找出二叉搜索树中指定节点的"下一个"节点(也即中序后继). 如果指定节点没有对应的"下一个"节点,则返回null. 示例 1: 输入: ...
- 程序员面试金典 - 面试题 05.06. 整数转换(位运算)
1. 题目 整数转换.编写一个函数,确定需要改变几个位才能将整数A转成整数B. 示例1:输入:A = 29 (或者0b11101), B = 15(或者0b01111)输出:2示例2:输入:A = 1 ...
- 程序员面试金典 - 面试题 03.03. 堆盘子 (vector(stack))
1. 题目 堆盘子.设想有一堆盘子,堆太高可能会倒下来.因此,在现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子. 请实现数据结构SetOfStacks,模拟这种行为.SetOfStacks 应 ...
- 程序员面试金典 - 面试题 03.01. 三合一(数组栈)
1. 题目 三合一.描述如何只用一个数组来实现三个栈. 你应该实现push(stackNum, value).pop(stackNum).isEmpty(stackNum).peek(stackNum ...
- 程序员面试金典 - 面试题 02.06. 回文链表(快慢指针+链表反转)
1. 题目 编写一个函数,检查输入的链表是否是回文的. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你 ...
最新文章
- 试用 smartdraw 2010 方便快捷的图表工具
- 泛洪攻击(Flood)与TCP代理(TCP proxy)
- Python中的运算符
- ST_Curve --- 一个专业的曲线绘制控件
- mysql8 grant语法失效
- 佰腾科技:专利大数据的云上裂变之路
- ai怎么约束每个字的大小_人工智能的约束满意问题
- 企业案例(二):增量恢复案例
- 书籍推荐——按角色划分
- 实例分割小工具labelme转coco
- Atitit 常见软件设计图纸总结 目录 1.1. ui原型图与html	2 1.2. 业务逻辑 伪代码 各种uml图	2 1.3. 总体设计图纸 结构图 层次图 架构图	2 1.4. 业务逻辑
- 最全面的Fiddler 4教程讲解(界面)
- javah vs javac -h
- STM32菜鸟成长记录---RS485通讯协议的应用
- 腾讯加入“三月宕机全家桶”:系上海网络运营商光纤故障
- 对接支付宝APP支付后端实现最详细教程
- 为什么每个语言都要和Java作比较?一文带你搞懂!
- 使用python输出星号阵列
- MSCOMM32控件注册的两种办法
- 关于负数在计算机中的表示方法