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

* \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. Android 自定义电池控件
  2. 浅谈ASP.NET 缓存技术
  3. 消除类游戏ccf c语言,ccf试题 消除类游戏
  4. 基础笔试编程题(jz)
  5. idea+JRebel实现项目热部署
  6. 用行为树的方式思考问题
  7. 【Spring】Spring 深入理解注解及spring对注解的增强
  8. javascript 未来新方法的介绍
  9. ANDROID模拟器不能启动
  10. scala 入门初探
  11. Exchange2003不能自动删除日志
  12. 163的在线编辑器简析和配置使用
  13. 电子时钟课程设计报告
  14. [读书笔记] 代码整洁之道(二)
  15. 渗透测试-地基篇-Cobal Strike-taowu梼杌详细介绍(十九)
  16. 锐浪报表加载List泛型数据
  17. html制作排班表模板,你会制作排班表吗?手把手教你用Word制作!分分钟搞定!...
  18. 码云推荐 | 那些优秀的网络爬虫工具介绍
  19. 基于单片机的TLC稳压电源系统设计-基于单片机大脑运算能力智力测试仪-基于单片机超声波测距系统仿真设计(报告 PCB 原理图)-基于单片机超高精度电参数测试设计-基于单片机变电站变压器运行参数监测仿真
  20. 基于ServiceStage的微服务开发与部署(二)

热门文章

  1. 【spring mvc】annotation-driven 配置详解
  2. 模型保存文件.npy
  3. 网易云音乐虚化图片html,CSS之高斯模糊—(网易云歌单)
  4. 内网/外网介绍以及两者比较
  5. [Python] 必应搜索主页的背景图片爬虫
  6. java 工厂模式例子_java 工厂模式简单介绍及例子
  7. 免费、可商用的素材网站
  8. 北京年内首现二手房连续三日成交破450套
  9. Java | PTA练习:Employee类的层级结构
  10. 统计学简介之十七——双因素方差分析