Animal Shelter:动物收容所只收留猫和狗,并且严格按照先进先出的规则。人们指只能领养最早进入动物收容所的动物,但是可以选择领养猫还是领养狗。
如果将猫狗放在一个队列中,那么dequeueAny()是最容易实现的,但是dequeueDog和dequeueCat就麻烦了,必须要遍历队列进行选择,所以将猫和狗放在两个队列里更合适一些,这样可以根据收留的时间对猫和狗进行排序。此时dequeueAny()应该是返回两个队列中更早被收留的动物。
class AnimalShelf {
private:
queue<pair<int, int>> qCat;
queue<pair<int, int>> qDog;
const int CatType = 0, DogType = 1;
public:
AnimalShelf() {
}
void enqueue(vector<int> animal) {
if(animal[1] == CatType){
qCat.push(pair<int, int>(animal[0], CatType));
}
else if(animal[1] == DogType){
qDog.push(pair<int, int>(animal[0], DogType));
}
else;
}
vector<int> dequeueAny() {
vector<int> ret;
if(qCat.empty() && qDog.empty()){
return {-1, -1};
}
else if(qCat.empty()){
return dequeueDog();
}
else if(qDog.empty()){
return dequeueCat();
}
else{
if(qCat.front().first < qDog.front().first){
return dequeueCat();
}
else{
return dequeueDog();
}
}
}
vector<int> dequeueDog() {
vector<int> ret;
if(qDog.empty()){
return {-1, -1};
}
else{
ret.push_back(qDog.front().first);
ret.push_back(qDog.front().second);
qDog.pop();
return ret;
}
}
vector<int> dequeueCat() {
vector<int> ret;
if(qCat.empty()){
return {-1, -1};
}
else{
ret.push_back(qCat.front().first);
ret.push_back(qCat.front().second);
qCat.pop();
return ret;
}
}
};
/**
* 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();
*/
本文介绍了一种动物收容所的队列管理系统,该系统通过使用两个队列分别管理猫和狗,实现了先进先出的原则。人们可以领养最早进入收容所的动物,同时可以选择领养猫或狗。系统提供了enqueue、dequeueAny、dequeueDog和dequeueCat等方法,以确保收养流程的公平性和效率。
368

被折叠的 条评论
为什么被折叠?



