首页 > 编程语言 >#yyds干货盘点# LeetCode程序员面试金典:动物收容所

#yyds干货盘点# LeetCode程序员面试金典:动物收容所

时间:2022-12-19 20:01:12浏览次数:55  
标签:yyds queueCat return int 金典 enqueue 收容所 queueDog animal

题目:

动物收容所。有家动物收容所只收容狗与猫,且严格遵守“先进先出”的原则。在收养该收容所的动物时,收养人只能收养所有动物中“最老”(由其进入收容所的时间长短而定)的动物,或者可以挑选猫或狗(同时必须收养此类动物中“最老”的)。换言之,收养人不能自由挑选想收养的对象。请创建适用于这个系统的数据结构,实现各种操作方法,比如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]]

代码实现:

class AnimalShelf {

LinkedList<int[]> queueCat;
LinkedList<int[]> queueDog;

public AnimalShelf() {
queueCat = new LinkedList<>();
queueDog = new LinkedList<>();
}

public void enqueue(int[] animal) {
// 判断种类后入队
if (animal[1] == 0) {
queueCat.addLast(animal);
} else if (animal[1] == 1) {
queueDog.addLast(animal);
}
}

// 挑选所有动物中最老的
public int[] dequeueAny() {
// 取出cat的队首,判空则直接返回
int[] headCat;
if (!queueCat.isEmpty()) {
headCat = queueCat.getFirst();
} else if (!queueDog.isEmpty()) {
// 当猫队列无猫时,直接将狗队列的第一个出队
return queueDog.removeFirst();
} else {
// 代表猫狗队列中无任何猫狗
return new int[]{-1,-1};
}
// 取出dog的队首,判空则直接返回
int[] headDog;
if (!queueDog.isEmpty()) {
headDog = queueDog.getFirst();
} else {
// 当狗队列无狗时,直接将猫队列的第一个出队
return queueCat.removeFirst();
}
// 当同时都有猫狗时 比较后返回 判断猫狗中谁比较老
if (headCat[0]<=headDog[0]) {
return queueCat.removeFirst();
} else {
return queueDog.removeFirst();
}
}
// 挑选狗
public int[] dequeueDog() {
if (!queueDog.isEmpty()) {
return queueDog.removeFirst();
} else {
return new int[]{-1,-1};
}
}
// 挑选猫
public int[] dequeueCat() {
if (!queueCat.isEmpty()) {
return queueCat.removeFirst();
} else {
return new int[]{-1,-1};
}
}
}

标签:yyds,queueCat,return,int,金典,enqueue,收容所,queueDog,animal
From: https://blog.51cto.com/u_13321676/5953780

相关文章

  • #yyds干货盘点#常用less函数
    文本行数限制.add-text-row-limit(@row){overflow:hidden;text-overflow:ellipsis;.create();.create()when(@row>1){display:-webkit-box;-webki......
  • #yyds干货盘点#【愚公系列】2022年09月 微信小程序-WebGL画正方形
    前言WebGL(全写WebGraphicsLibrary)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGLES2.0结合在一起,通过增加OpenGLES2.0的一个JavaScript绑定,WebGL可以为......
  • #yyds干货盘点# 名企真题专题:小A最多会新认识的多少人
    1.简述:描述小A参加了一个n人的活动,每个人都有一个唯一编号i(i>=0&i<n),其中m对相互认识,在活动中两个人可以通过互相都认识的一个人介绍认识。现在问活动结束后,小A最多会认......
  • #yyds干货盘点# LeetCode程序员面试金典:栈排序
    题目:栈排序。编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek......
  • #yyds干货盘点#聊一聊curl的用法
    curl是什么cURL(客户端URL)是一个开放源代码的命令行工具,用来请求Web和其他各种类型的服务器。curl有着大量的参数,常用来测试/调试服务器的开发和排查等,堪称一个网络“神器”......
  • #yyds干货盘点# react笔记之学习之创建表单
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • #yyds干货盘点# react笔记之学习之处理表单数据
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • #yyds干货盘点# LeetCode程序员面试金典:化栈为队
    题目:实现一个MyQueue类,该类用两个栈来实现一个队列。示例:MyQueuequeue=newMyQueue();queue.push(1);queue.push(2);queue.peek(); //返回1queue.pop(); //返回......
  • #yyds干货盘点# 名企真题专题:小招喵跑步
    1.简述:描述小招喵喜欢在数轴上跑来跑去,假设它现在站在点n处,它只会3种走法,分别是:1.数轴上向前走一步,即n=n+1 2.数轴上向后走一步,即n=n-1 3.数轴上使劲跳跃到当前点的两倍,......
  • #yyds干货盘点#前端性能优化
    浏览器渲染流程解析HTML文件,构建DOM树,同时浏览器主进程负责下载CSS文件CSS文件下载完成,解析CSS文件成树形的数据结构,然后结合DOM树合并成RenderObject树布局R......