【题目】
有家动物收容所只收容狗与猫,且严格遵守“先进先出”的原则,在收养该收容所的动物时,收养人只能收养所有动物中“最老”(由其进入收容所的时间长短而定)的动物,或者可以挑选猫或狗(同时必须收养此类动物中“最老”的)。换言之,收养人不能自由挑选想收养的对象。请创建适用于这个系统的数据结构,实现各种操作方法,比如enqueue、dequeueAny、dequeueDog和dequeueCat。允许使用Java内置的LinkedList数据结构。enqueue方法有一个animal参数,animal[0]代表动物编号,animal[1]代表动物种类,其中 0 代表猫,1 代表狗。dequeue*方法返回一个列表[动物编号, 动物种类],若没有可以收养的动物,则返回[-1,-1]。
来源:leetcode
链接:https://leetcode-cn.com/problems/animal-shelter-lcci/
【提示】
收纳所的最大容量为20000
【代码】
class AnimalShelf {
private:
queue<vector<int>> qcat,qdog;
public:
AnimalShelf() {
}
void enqueue(vector<int> animal) {
if(animal[1]){//dog
qdog.push(animal);
}else//cat
qcat.push(animal);
}
vector<int> dequeueAny() {
vector<int> v;
if(qdog.size()&&qcat.size()){
if(qdog.front()[0]<qcat.front()[0]){
v=qdog.front();
qdog.pop();
}else{
v=qcat.front();
qcat.pop();
}
return v;
}else if(qdog.size()){
return dequeueDog();
}else if(qcat.size()){
return dequeueCat();
}else
return {-1,-1};
}
vector<int> dequeueDog() {
vector<int> v;
if(qdog.size()){
v=qdog.front();
qdog.pop();
return v;
}
return {-1,-1};
}
vector<int> dequeueCat() {
vector<int> v;
if(qcat.size()){
v=qcat.front();
qcat.pop();
return v;
}
return {-1,-1};
}
};
/**
* Your AnimalShelf object will be instantiated and called as such:
* AnimalShelf* obj = new AnimalShelf();
* obj->enqueue(animal);
* vector<int> param_2 = obj->dequeueAny();
* vector<int> param_3 = obj->dequeueDog();
* vector<int> param_4 = obj->dequeueCat();
*/