【简单】面试题 03.06. 动物收容所

本文介绍了一种用于动物收容所的数据结构设计,确保遵循先进先出的原则,同时支持特定条件下的动物领养。通过使用两个队列分别管理猫和狗,实现了高效的操作方法,包括enqueue、dequeueAny、dequeueDog和dequeueCat。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【题目】
有家动物收容所只收容狗与猫,且严格遵守“先进先出”的原则,在收养该收容所的动物时,收养人只能收养所有动物中“最老”(由其进入收容所的时间长短而定)的动物,或者可以挑选猫或狗(同时必须收养此类动物中“最老”的)。换言之,收养人不能自由挑选想收养的对象。请创建适用于这个系统的数据结构,实现各种操作方法,比如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();
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值