1. 题目

动物收容所。有家动物收容所只收容狗与猫,且严格遵守“先进先出”的原则。

在收养该收容所的动物时,收养人只能收养所有动物中“最老”(由其进入收容所的时间长短而定)的动物,或者可以挑选猫或狗(同时必须收养此类动物中“最老”的)。

换言之,收养人不能自由挑选想收养的对象。请创建适用于这个系统的数据结构,实现各种操作方法,比如enqueue、dequeueAny、dequeueDogdequeueCat。允许使用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. 动物收容所(队列)相关推荐

  1. 程序员面试金典面试题 01.06. 字符串压缩

    前言 本系列文章为<程序员面试金典>刷题笔记. 题目位置:字符串压缩 题集:程序员面试金典 题目 字符串压缩.利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能.比如,字符串a ...

  2. 程序员面试金典 - 面试题 17.06. 2出现的次数(找递推规律)

    1. 题目 编写一个方法,计算从 0 到 n (含 n) 中数字 2 出现的次数. 示例: 输入: 25 输出: 9 解释: (2, 12, 20, 21, 22, 23, 24, 25)(注意 22 ...

  3. 程序员面试金典 - 面试题 03.05. 栈排序(两栈)

    1. 题目 栈排序. 编写程序,对栈进行排序使最小元素位于栈顶. 最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中. 该栈支持如下操作:push.pop.peek 和 ...

  4. 程序员面试金典 - 面试题 16.06. 最小差(排序+双指针)

    1. 题目 给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差 示例: 输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, ...

  5. 程序员面试金典 - 面试题 04.06. 后继者(循环中序遍历)

    1. 题目 设计一个算法,找出二叉搜索树中指定节点的"下一个"节点(也即中序后继). 如果指定节点没有对应的"下一个"节点,则返回null. 示例 1: 输入: ...

  6. 程序员面试金典 - 面试题 05.06. 整数转换(位运算)

    1. 题目 整数转换.编写一个函数,确定需要改变几个位才能将整数A转成整数B. 示例1:输入:A = 29 (或者0b11101), B = 15(或者0b01111)输出:2示例2:输入:A = 1 ...

  7. 程序员面试金典 - 面试题 03.03. 堆盘子 (vector(stack))

    1. 题目 堆盘子.设想有一堆盘子,堆太高可能会倒下来.因此,在现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子. 请实现数据结构SetOfStacks,模拟这种行为.SetOfStacks 应 ...

  8. 程序员面试金典 - 面试题 03.01. 三合一(数组栈)

    1. 题目 三合一.描述如何只用一个数组来实现三个栈. 你应该实现push(stackNum, value).pop(stackNum).isEmpty(stackNum).peek(stackNum ...

  9. 程序员面试金典 - 面试题 02.06. 回文链表(快慢指针+链表反转)

    1. 题目 编写一个函数,检查输入的链表是否是回文的. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你 ...

最新文章

  1. 试用 smartdraw 2010 方便快捷的图表工具
  2. 泛洪攻击(Flood)与TCP代理(TCP proxy)
  3. Python中的运算符
  4. ST_Curve --- 一个专业的曲线绘制控件
  5. mysql8 grant语法失效
  6. 佰腾科技:专利大数据的云上裂变之路
  7. ai怎么约束每个字的大小_人工智能的约束满意问题
  8. 企业案例(二):增量恢复案例
  9. 书籍推荐——按角色划分
  10. 实例分割小工具labelme转coco
  11. Atitit 常见软件设计图纸总结 目录 1.1. ui原型图与html 2 1.2. 业务逻辑 伪代码 各种uml图 2 1.3. 总体设计图纸 结构图 层次图 架构图 2 1.4. 业务逻辑
  12. 最全面的Fiddler 4教程讲解(界面)
  13. javah vs javac -h
  14. STM32菜鸟成长记录---RS485通讯协议的应用
  15. 腾讯加入“三月宕机全家桶”:系上海网络运营商光纤故障
  16. 对接支付宝APP支付后端实现最详细教程
  17. 为什么每个语言都要和Java作比较?一文带你搞懂!
  18. 使用python输出星号阵列
  19. MSCOMM32控件注册的两种办法
  20. 关于负数在计算机中的表示方法

热门文章

  1. $.ajax 同步一不,ajax 同步不生效
  2. 分段处理_连续油管无限级可开关固井滑套分段压裂工艺
  3. ffmpeg 截图 java_Java Web 中使用ffmpeg实现视频转码、视频截图
  4. Python 37 进程池与线程池 、 协程
  5. ActionScript 3.0 组件!
  6. C/C++中的占位符
  7. 有意思的select~
  8. 硬件基础 —— 电阻
  9. 进程间的通信——无名管道
  10. Utility.cpp的函数