/*****************************************************

* \file CatDogAsylum.cpp

* \date 2016/05/09 15:19

* \问题描述:

题目描述

有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,

第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进入收容所的。

给定一个操作序列int[][2] ope(C++中为vector>)代表所有事件。若第一个元素为1,则代表有动物进入收容所,

第二个元素为动物的编号,正数代表狗,负数代表猫;若第一个元素为2,则代表有人收养动物,第二个元素若为0,则采取第一种收养方式,

若为1,则指定收养狗,若为-1则指定收养猫。请按顺序返回收养的序列。若出现不合法的操作,即没有可以符合领养要求的动物,则将这次领养操作忽略。

测试样例:

[[1,1],[1,-1],[2,0],[2,-1]]

返回:[1,-1]

* \问题分析:

思路:定义两个vector对象A和B,分别用于存放收容所里的动物和被收养的动物

操作如下:

对ope数组从按行从i = 0 ~ ope.size() -1遍历

1、指令为1(ope[i][0] = 1)时,即有动物进来,则将动物序号压入A--执行A.push_back(ope[i][1]);

2、指令为2(ope[i][0] = 2)时,即有动物被收养,此时首先判断A是否为空,即是否有动物

1)如果A为空,则continue

2)如果A不为空

1.如果操作为ope[i][1] = 0,即收养最先进来的动物,则将A[0]压入B,执行B.push_back(A[0]),然后在A中删除对应元素,即执行A.erase(A.begin());

2.如果操作为ope[i][1] = 1,即收养最先进来的狗,此时遍历A找到第一个狗,然后将找到的元素压入B,再在A中删除对应元素;

3.如果操作为ope[i][1] = -1,即收养最先进来的猫,此时遍历A找到第一个猫,然后将找到的元素压入B,再在A中删除对应的元素。

遍历完成之后,返回B。

*****************************************************/#include

using namespacestd;

#include

classCatDogAsylum {public:

vector asylum(vector >ope) {//write code here

int len =ope.size();

vector ans, in;if (len==0)

{returnans;

}for (int i = 0; i < len;i++)

{if (ope[i][0]==1) //有动物来收容所

{in.push_back(ope[i][1]);

}else if (ope[i][0]==2) //有人收养

{if (in.empty())

{continue;

}if (ope[i][1]==0) //第一种收养方式,取第一个

{

ans.push_back(in[0]);in.erase(in.begin());

}else if (ope[i][1]==1) //指定养狗

{for (int i = 0; i < in.size();i++)

{if (in[i]>0)

{

ans.push_back(in[i]);in.erase(in.begin()+i);break;

}

}

}else if (ope[i][1]==-1) //指定养猫

{for (int i = 0; i < in.size();i++)

{if (in[i]<0)

{

ans.push_back(in[i]);in.erase(in.begin()+i);break;

}

}

}

}

}returnans;

}

};//

//题目分析://根据先进先出的原则,自然想到了用队列实现,如果只维护一个队列,那么第一种方法实现起来比较简单,只需要取出队头的动物则可以,//但是第二种方法就比较复杂,需要访问整个队列来找出第一个被访问的猫或者狗。//因此我们可以选择维护两个队列来实现,一个队列存放放入的狗,一个队列存放放入的猫,对于第二种方法实现起来相当容易,//我们只需要根据要选择的猫或者狗从相应的队列中取出便可以,但是第一种方法需要判断那个两个队列头部的是猫先进入收容所,还是狗先进入,//这个时候需要一个标志,所以我们每次把动物放入队列的时候,同时将一个递增的序号放入队列,这个序号就是一个时间序列,根据这个序号便可以轻松实现第一种方法。//《程序员面试金典》--题目详解://http ://blog.csdn.net/zdplife/article/category/5799903

//

#include

classCatDogAsylum {public:

vector asylum(vector >ope) {//write code here

queuecat;

queuedog;

vectorvec;int index = 0;int size1 =ope.size();for (int i = 0; i < size1; i++)

{int kind = ope[i][0];if (kind == 1) //有动物来收容所

{if (ope[i][1] >= 0) //狗队列

{

dog.push(index++); //标记谁是自一个进入

dog.push(ope[i][1]);

}else{

cat.push(index++); //猫队列

cat.push(ope[i][1]);

}

}else //有人收养

{if (ope[i][1] == 0) //收养最先进来的动物

{int min = 0;if (cat.empty() && !dog.empty()) //dog不为空

min = 1;if (!cat.empty() &&dog.empty())

min= -1;if (!cat.empty() && !dog.empty())

min= dog.front() > cat.front() ? -1 : 1;if (min == -1) //收养猫

{

cat.pop();

vec.push_back(cat.front());

cat.pop();

}if (min == 1) //收养狗

{

dog.pop();

vec.push_back(dog.front());

dog.pop();

}

}else{if (ope[i][1] == 1 && !dog.empty()) //收养狗

{

dog.pop();

vec.push_back(dog.front());

dog.pop();

}if (ope[i][1] == -1 && !cat.empty()) //收养猫

{

cat.pop();

vec.push_back(cat.front());

cat.pop();

}

}

}

}returnvec;

}

};

catdog matlab,猫狗收养所 - ranjiewen的个人空间 - OSCHINA - 中文开源技术交流社区相关推荐

  1. php网站安全狗绕过,最新安全狗绕过姿势 - Azeng呐的个人空间 - OSCHINA - 中文开源技术交流社区...

    安全狗是让大家最头疼的安全防护软件,然后我给大家带来最新的安全狗绕过,也不知道能活多久.攻防永无止境吧. 最新版本安全狗从官网下载的,我来说一下思路.要想绕过安全狗首先你要知道,安全狗是怎么防护的,过 ...

  2. 频率域滤波matlab函数,频率域滤波(2) - osc_t0xmr011的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.频率域滤波的基本步骤: 1)使用函数tofloat把输入图像转换为浮点图像(im2double函数也可以) [f,revertclass] = tofloat(f) 2)使用函数paddedsiz ...

  3. matlab提示音,matlab发出声音 - osc_45mm6g1p的个人空间 - OSCHINA - 中文开源技术交流社区...

    我有时候运行一段很长的代码,在等待的时候去做别的事,希望程序运行完可以有一个提示音. 这可以用matlab的一个函数sound实现,该函数的输入参量是音频数据向量.采样频率和转换位数. % 响一声 s ...

  4. 精英主义 遗传算法 matlab,遗传算法优化 - osc_lfs4vsih的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.遗传算法简介 遗传算法是一种基于自然选择和群体遗传机理的搜索算法,它模拟了自然选择和自然遗传过程中的繁殖.杂交和突变现象.再利用遗传算法求解问题时,问题的每一个可能解都被编码成一个"染色 ...

  5. matlab一计算自动四舍五入6,matlab总结 - osc_msmij2gf的个人空间 - OSCHINA - 中文开源技术交流社区...

    MATLAB 总结 一 基础部分 1.save('x','y','z') 保存三个变量 2.load('var') 加载变量 3.help size who dir cd delete clear 4 ...

  6. 七猫php面试,七猫面试 - osc_2frv0wjp的个人空间 - OSCHINA - 中文开源技术交流社区...

    time 返回的是系统当前的unix时间戳的int值,无参数 strtotime 是将一个字符串格式的时间日期,转换成对应的unix时间戳的int值,需要给定一个指定的字符串格式的时间 strrchr ...

  7. 用python写生日祝福的教程_祝豌豆生日快乐 - Python猫的个人空间 - OSCHINA - 中文开源技术交流社区...

    不算不知道,一算吓一跳:近三个月,豌豆已经读完心理学相关的书 14 本,为此写了 12 篇文章,按每篇平均 4000 字算,已经累计 4.8 万字了. 这还没完,她还给某个篇均阅读量 2.5 万的电视 ...

  8. matlab 康托尔集,测测你的数学直觉 - Dagis的个人空间 - OSCHINA - 中文开源技术交流社区...

    已知: 新冠测试的准确率: 新冠患者被测出positive的概率是0.9 非新冠患者被测试出negative的概率是0.9 整个人群的新冠患者比例是0.1 如果一个人被测试出positive,那他是新 ...

  9. opencv matlab三维点云,点云采样的三种方法 - 小白学视觉的个人空间 - OSCHINA - 中文开源技术交流社区...

    点击上方"小白学视觉",选择"星标"公众号 重磅干货,第一时间送达 编辑:3D视觉工坊 本文由知乎作者GeometryHub授权转载,不得擅自二次转载. 原文链 ...

  10. php nslookup,nslookup - 运维猫的个人空间 - OSCHINA - 中文开源技术交流社区

    nslookup命令用于查询DNS的记录,查看域名解析是否正常,在网络故障的时候用来诊断网络问题.nslookup的用法相对来说还是蛮简单的,主要是下面的几个用法. 1.直接查询 这个可能大家用到最多 ...

最新文章

  1. 一张象限图引发的血案
  2. 2010年8月blog汇总:敏捷个人和OpenExpressApp之建模支持
  3. mongodb学习篇
  4. animation的6个属性
  5. C#日期控件(js版)
  6. 什么是document对象?如何获取文档对象上的元素?_dom对象
  7. 用python绘制心形_python小趣味_520绘制一个心形.
  8. dw1000 github_GitHub打破了我的1000天连胜纪录
  9. python逻辑表达式是什么_如何在Python中处理逻辑表达式?
  10. 2021级计科新生C语言项目设计视频集锦
  11. js 日期时间的格式化工具类
  12. python批量修改文件名加后缀_python文件操作之批量修改文件后缀名的方法
  13. PS学习笔记2-ps的基础操作
  14. 驾照科二科三训练总结
  15. python网格交易法详解_干货 | 等分网格交易法详解
  16. abb机器人编程手册_002.ABB机器人高级编程--String飞升篇
  17. mysql57是什么_关于mysql57的详细介绍
  18. 记录hyperic-hq搭建开发环境遇到的坑
  19. java MP3等格式转换和压缩
  20. 简述xhr -xhr的基本使用

热门文章

  1. python登录微信pc版_详解PC端微信扫码注册和登录实例代码
  2. 如何刷新微信服务器小程序版本,微信小程序线上更新版本流程及如何运用
  3. MySQL技术:InnoDB 存储引擎(不同版本的 Master Thread 工作方式)
  4. countif和sum套用_COUNTIF与SUMIF函数的常见用法
  5. 【Pyqt5】实现小学三年级口算题生成器
  6. python识别文字位置_如何利用Python识别图片中的文字
  7. 香港云服务器安全吗?
  8. 伦敦金行情走势k线图
  9. 苹果付费app共享公众号_公众号+搭建知识付费网课分销平台聚合型玩法解析
  10. property、setter、deleter装饰器的使用