1、思路
-
用两个队列分别表示猫和狗,队列中元素为
pair
类型,存储动物编号和猫狗类型; -
在弹出任何动物时要分四种情况讨论。
2、代码
class AnimalShelf {
private:
queue<pair<int, int>> queueCat;
queue<pair<int, int>> queueDog;
int count = 0; //用来自增的动物编号
public:
AnimalShelf() {
}
void enqueue(vector<int> animal) {
if (animal[1] == 1) queueDog.push(make_pair(count, animal[0])); //判断是否为狗,进队
else queueCat.push(make_pair(count, animal[0])); //判断是否为猫,进队
++ count;
}
vector<int> dequeueAny() {
if (queueCat.empty() && queueDog.empty()) return {-1, -1}; //无猫无狗
else if (queueCat.empty() && !queueDog.empty()) return dequeueDog(); //无猫有狗
else if (!queueCat.empty() && queueDog.empty()) return dequeueCat(); //有猫无狗
else if (queueCat.front().first < queueDog.front().first) return dequeueCat();
else return dequeueDog(); //有猫有狗,且狗的编号较小
}
vector<int> dequeueDog() { //从狗队列头部弹出
if (queueDog.empty()) return {-1, -1};
int dogNum = queueDog.front().first;
queueDog.pop();
return {dogNum, 1};
}
vector<int> dequeueCat() { //从狗队列头部弹出
if (queueCat.empty()) return {-1, -1};
int catNum = queueCat.front().first;
queueCat.pop();
return {catNum, 0};
}
};
代码参考自: Orange的题解