猫狗收容所

原创 2016年08月30日 12:10:49

题目描述
有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进入收容所的。
给定一个操作序列int[][2] ope(C++中为vector<vector<int>>)代表所有事件。若第一个元素为1,则代表有动物进入收容所,第二个元素为动物的编号,正数代表狗,负数代表猫;若第一个元素为2,则代表有人收养动物,第二个元素若为0,则采取第一种收养方式,若为1,则指定收养狗,若为-1则指定收养猫。请按顺序返回收养的序列。若出现不合法的操作,即没有可以符合领养要求的动物,则将这次领养操作忽略。

测试样例:

[[1,1],[1,-1],[2,0],[2,-1]]
返回:[1,-1]

思路:
建立三个队列,一个放收养的猫,一个放收养的狗,一个放所有收养的动物。因为队列的特性,先放入其中的就先出队列,之后就是逻辑判断了。

public ArrayList<Integer> asylum(int[][] ope) {
    Queue<Integer> catQueue = new LinkedList<Integer>();
    Queue<Integer> dogQueue = new LinkedList<Integer>();
    Queue<Integer> allQueue = new LinkedList<Integer>();
    ArrayList<Integer> res = new ArrayList<Integer>();

    for (int i = 0; i < ope.length; i++) {
        if (ope[i][0] == 1) {// 进收养所
            if (ope[i][1] > 0) {// 狗
                dogQueue.offer(ope[i][1]);
            }
            if (ope[i][1] < 0) {// 猫
                catQueue.offer(ope[i][1]);
            }
            allQueue.offer(ope[i][1]);
        }
        if (ope[i][0] == 2) {// 有人收养
            if (ope[i][1] == 0) {// 收养最早的
                if(!allQueue.isEmpty()){
                    int popNum = allQueue.poll();
                    res.add(popNum);
                    if (popNum > 0) {
                        dogQueue.poll();
                    } else if(popNum < 0) {
                        catQueue.poll();
                    }
                }
            }

            if (ope[i][1] == 1) {// 收养最早的狗
                if(!dogQueue.isEmpty()){
                    int tmp = dogQueue.poll();
                    res.add(tmp);
                    allQueue.remove(tmp);
                }
            }

            if (ope[i][1] == -1) {// 收养最早的猫
                if(!catQueue.isEmpty()){
                    int tmp = catQueue.poll();
                    res.add(tmp);
                    allQueue.remove(tmp);
                }
            }
        }
    }

    return res;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

DataCastle[猫狗大战]冠军——Kuhung 思路及代码

我是参加DataCastle猫狗大战的选手,kuhung。在测评中,我提交的数据集最后评分0.98639。以下是我的备战过程及心得体会。(最后有完整代码及较全面的注释)...
  • DataCastle
  • DataCastle
  • 2016年08月12日 10:46
  • 2803

[keras]猫狗大战的总结

这篇博客主要参考的是keras官方文档中的“面向小数据集构建图像分类模型”。本文记录了学习这篇文章遇到的问题和自己探索的一些方法。官方文档的大致思路是:首先利用去掉全连接层的VGG-16网络,得到数据...
  • SMUEvian
  • SMUEvian
  • 2017年03月04日 17:31
  • 2214

基于TensorFlow的Cats vs. Dogs(猫狗大战)实现和详解(1)

2017.5.29   猫狗大战,tensorflow实现,超详细讲解
  • qq_16137569
  • qq_16137569
  • 2017年05月29日 15:33
  • 8171

【程序员面试金典】猫狗收容所

一.题目描述 有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进入收容所的...
  • ONEDAY_789
  • ONEDAY_789
  • 2017年06月09日 17:15
  • 444

第六天 用两个栈实现队列+双栈排序+猫狗收容所

最近由于写论文的原因,刷题的频率相对下降。为了节约时间,一般题目只有自己代码,不满意的题目会贴别人优秀代码。 用两个栈实现队列和双栈排序想法大致相同,有点像插入排序,每次通过在两个栈之间相互传输保证相...
  • Taylor_ChaosDreamer
  • Taylor_ChaosDreamer
  • 2016年07月31日 12:19
  • 235

【数据结构机试复习4】 猫狗收容所 & 机器人走方格

Ex1: 猫狗收容所:       有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或狗),并...
  • weixin_40372954
  • weixin_40372954
  • 2018年01月06日 10:20
  • 40

程序员面试金典——猫狗收容所

题目描述         有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或狗),并收养该种动...
  • sinat_24048051
  • sinat_24048051
  • 2017年04月26日 11:08
  • 92

《程序员面试金典》--狗猫收容所

题目描述:    有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进入收容...
  • zdplife
  • zdplife
  • 2015年10月05日 16:47
  • 650

《程序员面试金典》猫狗收容所

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:libin493073668@sina.com】 题目链接:http://www.nowcoder.com/p...
  • libin1105
  • libin1105
  • 2015年09月16日 16:07
  • 883

牛客网 | 猫狗收容所

题目描述         有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或狗),并收养该种动...
  • weizaishouex2010
  • weizaishouex2010
  • 2015年12月27日 14:17
  • 441
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:猫狗收容所
举报原因:
原因补充:

(最多只允许输入30个字)