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.直接查询 这个可能大家用到最多 ...
最新文章
- 一张象限图引发的血案
- 2010年8月blog汇总:敏捷个人和OpenExpressApp之建模支持
- mongodb学习篇
- animation的6个属性
- C#日期控件(js版)
- 什么是document对象?如何获取文档对象上的元素?_dom对象
- 用python绘制心形_python小趣味_520绘制一个心形.
- dw1000 github_GitHub打破了我的1000天连胜纪录
- python逻辑表达式是什么_如何在Python中处理逻辑表达式?
- 2021级计科新生C语言项目设计视频集锦
- js 日期时间的格式化工具类
- python批量修改文件名加后缀_python文件操作之批量修改文件后缀名的方法
- PS学习笔记2-ps的基础操作
- 驾照科二科三训练总结
- python网格交易法详解_干货 | 等分网格交易法详解
- abb机器人编程手册_002.ABB机器人高级编程--String飞升篇
- mysql57是什么_关于mysql57的详细介绍
- 记录hyperic-hq搭建开发环境遇到的坑
- java MP3等格式转换和压缩
- 简述xhr -xhr的基本使用
热门文章
- python登录微信pc版_详解PC端微信扫码注册和登录实例代码
- 如何刷新微信服务器小程序版本,微信小程序线上更新版本流程及如何运用
- MySQL技术:InnoDB 存储引擎(不同版本的 Master Thread 工作方式)
- countif和sum套用_COUNTIF与SUMIF函数的常见用法
- 【Pyqt5】实现小学三年级口算题生成器
- python识别文字位置_如何利用Python识别图片中的文字
- 香港云服务器安全吗?
- 伦敦金行情走势k线图
- 苹果付费app共享公众号_公众号+搭建知识付费网课分销平台聚合型玩法解析
- property、setter、deleter装饰器的使用