catdog matlab,猫狗收养所 - ranjiewen的个人空间 - OSCHINA - 中文开源技术交流社区
/*****************************************************
* \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 - 中文开源技术交流社区相关推荐
- php网站安全狗绕过,最新安全狗绕过姿势 - Azeng呐的个人空间 - OSCHINA - 中文开源技术交流社区...
安全狗是让大家最头疼的安全防护软件,然后我给大家带来最新的安全狗绕过,也不知道能活多久.攻防永无止境吧. 最新版本安全狗从官网下载的,我来说一下思路.要想绕过安全狗首先你要知道,安全狗是怎么防护的,过 ...
- 频率域滤波matlab函数,频率域滤波(2) - osc_t0xmr011的个人空间 - OSCHINA - 中文开源技术交流社区...
一.频率域滤波的基本步骤: 1)使用函数tofloat把输入图像转换为浮点图像(im2double函数也可以) [f,revertclass] = tofloat(f) 2)使用函数paddedsiz ...
- matlab提示音,matlab发出声音 - osc_45mm6g1p的个人空间 - OSCHINA - 中文开源技术交流社区...
我有时候运行一段很长的代码,在等待的时候去做别的事,希望程序运行完可以有一个提示音. 这可以用matlab的一个函数sound实现,该函数的输入参量是音频数据向量.采样频率和转换位数. % 响一声 s ...
- 精英主义 遗传算法 matlab,遗传算法优化 - osc_lfs4vsih的个人空间 - OSCHINA - 中文开源技术交流社区...
1.遗传算法简介 遗传算法是一种基于自然选择和群体遗传机理的搜索算法,它模拟了自然选择和自然遗传过程中的繁殖.杂交和突变现象.再利用遗传算法求解问题时,问题的每一个可能解都被编码成一个"染色 ...
- matlab一计算自动四舍五入6,matlab总结 - osc_msmij2gf的个人空间 - OSCHINA - 中文开源技术交流社区...
MATLAB 总结 一 基础部分 1.save('x','y','z') 保存三个变量 2.load('var') 加载变量 3.help size who dir cd delete clear 4 ...
- 七猫php面试,七猫面试 - osc_2frv0wjp的个人空间 - OSCHINA - 中文开源技术交流社区...
time 返回的是系统当前的unix时间戳的int值,无参数 strtotime 是将一个字符串格式的时间日期,转换成对应的unix时间戳的int值,需要给定一个指定的字符串格式的时间 strrchr ...
- 用python写生日祝福的教程_祝豌豆生日快乐 - Python猫的个人空间 - OSCHINA - 中文开源技术交流社区...
不算不知道,一算吓一跳:近三个月,豌豆已经读完心理学相关的书 14 本,为此写了 12 篇文章,按每篇平均 4000 字算,已经累计 4.8 万字了. 这还没完,她还给某个篇均阅读量 2.5 万的电视 ...
- matlab 康托尔集,测测你的数学直觉 - Dagis的个人空间 - OSCHINA - 中文开源技术交流社区...
已知: 新冠测试的准确率: 新冠患者被测出positive的概率是0.9 非新冠患者被测试出negative的概率是0.9 整个人群的新冠患者比例是0.1 如果一个人被测试出positive,那他是新 ...
- opencv matlab三维点云,点云采样的三种方法 - 小白学视觉的个人空间 - OSCHINA - 中文开源技术交流社区...
点击上方"小白学视觉",选择"星标"公众号 重磅干货,第一时间送达 编辑:3D视觉工坊 本文由知乎作者GeometryHub授权转载,不得擅自二次转载. 原文链 ...
- php nslookup,nslookup - 运维猫的个人空间 - OSCHINA - 中文开源技术交流社区
nslookup命令用于查询DNS的记录,查看域名解析是否正常,在网络故障的时候用来诊断网络问题.nslookup的用法相对来说还是蛮简单的,主要是下面的几个用法. 1.直接查询 这个可能大家用到最多 ...
最新文章
- Android 自定义电池控件
- 浅谈ASP.NET 缓存技术
- 消除类游戏ccf c语言,ccf试题 消除类游戏
- 基础笔试编程题(jz)
- idea+JRebel实现项目热部署
- 用行为树的方式思考问题
- 【Spring】Spring 深入理解注解及spring对注解的增强
- javascript 未来新方法的介绍
- ANDROID模拟器不能启动
- scala 入门初探
- Exchange2003不能自动删除日志
- 163的在线编辑器简析和配置使用
- 电子时钟课程设计报告
- [读书笔记] 代码整洁之道(二)
- 渗透测试-地基篇-Cobal Strike-taowu梼杌详细介绍(十九)
- 锐浪报表加载List泛型数据
- html制作排班表模板,你会制作排班表吗?手把手教你用Word制作!分分钟搞定!...
- 码云推荐 | 那些优秀的网络爬虫工具介绍
- 基于单片机的TLC稳压电源系统设计-基于单片机大脑运算能力智力测试仪-基于单片机超声波测距系统仿真设计(报告 PCB 原理图)-基于单片机超高精度电参数测试设计-基于单片机变电站变压器运行参数监测仿真
- 基于ServiceStage的微服务开发与部署(二)