常州市网站制作,郑州网站建设服务,免费网站注册com凶,网站栏目一般有哪些题目#xff1a;
有家动物收容所只收容狗与猫#xff0c;且严格遵守“先进先出”的原则。在收养该收容所的动物时#xff0c;收养人只能收养所有动物中“最老”#xff08;由其进入收容所的时间长短而定#xff09;的动物#xff0c;或者可以挑选猫或狗#xff08;同时…题目
有家动物收容所只收容狗与猫且严格遵守“先进先出”的原则。在收养该收容所的动物时收养人只能收养所有动物中“最老”由其进入收容所的时间长短而定的动物或者可以挑选猫或狗同时必须收养此类动物中“最老”的。换言之收养人不能自由挑选想收养的对象。请创建适用于这个系统的数据结构实现各种操作方法比如enqueue、dequeueAny、dequeueDog和dequeueCat。允许使用Java内置的LinkedList数据结构。
enqueue方法有一个animal参数animal[0]代表动物编号animal[1]代表动物种类其中 0 代表猫1 代表狗。
dequeue*方法返回一个列表[动物编号, 动物种类]若没有可以收养的动物则返回[-1,-1]。 示例 输入 [AnimalShelf, enqueue, enqueue, dequeueCat, dequeueDog, dequeueAny] [[], [[0, 0]], [[1, 0]], [], [], []] 输出 [null,null,null,[0,0],[-1,-1],[1,0]] 示例解释
收容所可以收容动物也可以有收养人对收容所里的动物进行收养
猫咪类型为0狗狗类型为1
1.执行 enqueue00收容编号为0的猫咪无返回值
2.执行 enqueue10收容编号为1的猫咪无返回值
3.执行 dequeueCat现在要收养一只猫咪只能收养最老的所以就是编号为0的猫咪返回值为[0,0]
4.执行 dequeueDog现在要收养一只小狗但是目前收容所没有狗狗所以返回值为[-1,-1]
5.执行dequeueAny随机收养不指定猫狗选择目前收容所中最老的动物即可此时收容所只剩一只编号为1的猫咪所以返回[1,0] 解题思路
1.创建两个队列分别保存收容进来的小猫和小狗对头永远是最先进来的也就是最老的
2.在随机收养时如果两种动物都有存量要注意比较哪个动物更老 源代码如下
class AnimalShelf {
public://创建两个队列一个是存放猫猫的一个是存放狗狗的queueint cat,dog;AnimalShelf() {}//入队操作void enqueue(vectorint animal) {//获取动物的id和type//id表示动物编号type表示动物类型int idanimal[0],typeanimal[1];//type0表示该动物是猫猫就添加到猫猫队列中if(type0) cat.push(id);//否则添加到狗狗队列中else dog.push(id);}//随机收养vectorint dequeueAny() {//如果猫猫队列为空那么只能收养狗狗if(cat.empty()) return dequeueDog();//反之同理else if(dog.empty()) return dequeueCat();//如果两个都不空就比较猫猫最老的和狗狗最老的//选择这两个中最老的进行收养if(cat.front()dog.front()) return dequeueCat();return dequeueDog();}//收养狗狗vectorint dequeueDog() {//若队列为空无法收养返回{-1-1}if(dog.empty()) return{-1,-1};//获得对头元素的idint iddog.front();//将其出队dog.pop();//收养最老的也就是对头的那只猫return {id,1};}//收养猫猫vectorint dequeueCat() {//若队列为空无法收养返回{-1-1}if(cat.empty()) return{-1,-1};//获得对头元素的idint idcat.front();//将其出队cat.pop();//收养最老的也就是对头的那只猫return {id,0};}
};