题目描述
动物收容所。有家动物收容所只收容狗与猫,且严格遵守“先进先出”的原则。在收养该收容所的动物时,收养人只能收养所有动物中“最老”(由其进入收容所的时间长短而定)的动物,或者可以挑选猫或狗(同时必须收养此类动物中“最老”的)。换言之,收养人不能自由挑选想收养的对象。请创建适用于这个系统的数据结构,实现各种操作方法,比如enqueue、dequeueAny、dequeueDog和dequeueCat。允许使用Java内置的LinkedList数据结构。
enqueue方法有一个animal参数,animal[0]代表动物编号,animal[1]代表动物种类,其中 0 代表猫,1 代表狗。
dequeue*方法返回一个列表[动物编号, 动物种类],若没有可以收养的动物,则返回[-1,-1]。
我的解题
这个题目写的迷惑的不行
class AnimalShelf {
public:
AnimalShelf() {
}
void enqueue(vector<int> animal) {
if (animal.at(1) == 0) //动物种类:猫
{
m_queue_cat.push(animal);
}
else
{
m_queue_dog.push(animal);
}
}
vector<int> dequeueAny() {
vector<int> animal;
if (m_queue_cat.empty() && m_queue_dog.empty())
{
return vector<int>{-1, -1};
}
else if (!m_queue_cat.empty() && m_queue_dog.empty())
{
animal = m_queue_cat.front();
m_queue_cat.pop();
}
else if (m_queue_cat.empty() && !m_queue_dog.empty())
{
animal = m_queue_dog.front();
m_queue_dog.pop();
}
else
{
if (m_queue_cat.front().at(0) < m_queue_dog.front().at(0)) //动物编号:猫 < 狗 猫先出
{
animal = m_queue_cat.front();
m_queue_cat.pop();
}
else
{
animal = m_queue_dog.front();
m_queue_dog.pop();
}
}
return animal;
}
vector<int> dequeueDog() {
if (m_queue_dog.empty())
{
return vector<int>{-1, -1};
}
vector<int> dog = m_queue_dog.front();
m_queue_dog.pop();
return dog;
}
vector<int> dequeueCat() {
if (m_queue_cat.empty())
{
return vector<int>{-1, -1};
}
vector<int> cat = m_queue_cat.front();
m_queue_cat.pop();
return cat;
}
private:
queue<vector<int>> m_queue_cat;
queue<vector<int>> m_queue_dog;
};
/**
* 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();
*/
执行用时 :244 ms, 在所有 C++ 提交中击败了31.02%的用户
内存消耗 :114.8 MB, 在所有 C++ 提交中击败了100.00%的用户