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

测试样例:

输入:
[[1,1],[1, -1],[2,0],[2,-1]]

输出:
[1,-1]

思路:

  可以用两个队列catQueue和dogQueue用来进行猫和狗的入队操作和出队操作,如果想领养猫就只从catQueue出队,想养狗就是dogQueue出队,如果两个都可以就从两个队列中选择更早进入收容所的动物出队。

代码实现:

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;public class Main {private static class Animal {//动物的类型(猫或狗)int type;//动物进入收容所的时间(猫和狗共享的静态变量)static int timeline;//猫或狗独有的代表进入时间点的变量int time;//构造函数public Animal(int typeNumber) {//初始化动物类型this.type = typeNumber;//按时间线递增的顺序给猫或狗的时间点赋值this.time = timeline++;}}public ArrayList<Integer> solve(int[][] ope) {ArrayList<Integer> res = new ArrayList<>();//猫队列Queue<Animal> catQueue = new LinkedList<>();//狗队列Queue<Animal> dogQueue = new LinkedList<>();for (int[] animal : ope) {if (animal[0] == 1) {if (animal[1] > 0) {dogQueue.add(new Animal(animal[1]));} else if (animal[1] < 0) {catQueue.add(new Animal(animal[1]));}} else if (animal[0] == 2) {if (animal[1] == 1 && !dogQueue.isEmpty()) {res.add(dogQueue.poll().type);} else if (animal[1] == -1 && !catQueue.isEmpty()) {res.add(catQueue.poll().type);} else if (animal[1] == 0) {if (!catQueue.isEmpty() && dogQueue.isEmpty() || catQueue.peek().time < dogQueue.peek().time) {res.add(catQueue.poll().type);} else if (!dogQueue.isEmpty() && catQueue.isEmpty() || dogQueue.peek().time < catQueue.peek().time) {res.add(dogQueue.poll().type);}}}}return res;}//测试方法public static void main(String[] args) {int[][] dada = {{1, 1}, {1, -1}, {2, 0}, {2, -1}};System.out.println(new Main().solve(dada).toString().trim());}
}

猫狗收容所(有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进,入收容所的,第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进,入收容所)相关推荐

  1. 程序员如何发展第二职业?这几种副业方式超赚钱

    很多程序员曾表示,虽然月薪一两万,但有时候还是会焦虑. 尤其是遇上了年初裁员年底裁员这样的就业环境,焦虑就会逐步放大,这时候副业赚钱的重要性就体现出来了. 发展第二职业,可以让程序员们增加抗风险能力, ...

  2. python程序员如何发展第二职业?这几种副业方式超赚钱

    很多程序员曾表示,虽然月薪一两万,但有时候还是会焦虑. 尤其是遇上了年初裁员年底裁员这样的就业环境,焦虑就会逐步放大,这时候副业赚钱的重要性就体现出来了. 发展第二职业,可以让程序员们增加抗风险能力, ...

  3. mybatis 级联查询兑现_MyBatis之自查询使用递归实现 N级联动效果(两种实现方式)...

    A:首先先看下一个简单的面试题 斐波那契数列 计算数组{1,1,2,3,5,8.......} 第30位值 规律:1 1 从第三项开始,每一项都是前两项之和 有两种实现方式 第一种方式: public ...

  4. 单例模式的四种实现方式(饿汉模式、懒汉模式、静态内部类、枚举类)

    首先,设计模式是我们程序员在软件开发过程中面临的一般问题的解决方案,通过学习设计模式可以使我们在编程时更加有条理性,同时培养我们写代码的思维能力,从而提高我们的工作效率.接下来就跟着博主的脚步往下走吧 ...

  5. java线程的任务的三种创建方式,严格地说,就一种,就是如何重写Runnable接口的run()方法

    仅简单演示Java中线程任务的三种创建方式 第一种:使用了适配器模式,有返回值,能抛出异常,任务代码写在Callable.call()方法中,Runnable的run方法会通过适配器调用到Callab ...

  6. 设计模式 单例模式的几种实现方式

    一 简介 单例模式,对于一个类只有一个实例化对象. 必要点: 私有化 构造方法,不让new 编写类方法 暴露单例对象 私有化单例对象,只提供给内部使用 二 考虑到并发条件下的情况下 实现方式主要有如下 ...

  7. 当混合现实成为一种表达方式:从古祭台到复合投映剧场 | 浅空间专栏

    蔡锕 hi,大家好~~我是蔡锕.北建大建筑学本科,即将就读 TU Berlin 的舞美场景空间(Bühnenbild Szenischer Raum) 研究生,持续关注场景与空间体验的话题. 这期,我 ...

  8. Chat GPT五种变现方式

    随着Chat gpt的爆火,如何利用它来变现?这是一个伙伴测试出来的结果,一个月变现7万块,当你还在吃瓜看热闹的时候,有的人已经靠这个赚的盆满钵满了. 关于chat gpt是什么,这里就不介绍了,不清 ...

  9. 服务器机柜智能锁从哪供电,智能门锁的三种供电方式

    智能锁和传统锁具的一个不同之处在于智能锁的供电方式,智能锁除了能够用电池供电之外,还有其他方式进行供电.本篇文章就让小编告诉大家智能门锁供电的三种方式. 智能门锁供电-智能门锁的三种供电方式 第一种方 ...

  10. oracle Hash Join及三种连接方式

    在Oracle中,确定连接操作类型是执行计划生成的重要方面.各种连接操作类型代表着不同的连接操作算法,不同的连接操作类型也适应于不同的数据量和数据分布情况. 无论是Nest Loop Join(嵌套循 ...

最新文章

  1. 第四范式联合浪潮商用机器发布AI一体机,接入AI像使用手机一样简单
  2. Python-装饰器-案例-获取文件列表
  3. MYSQL delete语句不支持别名?
  4. JDK9新特性实战:简化流关闭新姿势
  5. DBCP连接池配置常用参数说明
  6. java视频压缩 lz4_一种视频序列帧的压缩方法、解压方法及装置与流程
  7. 短信广告中虚拟网关发送与电信网关发送的区别
  8. cas单点登陆系统-casServer搭建
  9. sql批量删除和条件查询
  10. jQuery基础简介
  11. paip.判断文件是否存在uapi python php java c#
  12. 【车间调度】基于matlab改进的遗传算法求解车间调度问题【含Matlab源码 H002期】
  13. 关于Unity可视化编程工具bolt的基本使用和思考
  14. mysql用alter创建外键_MySQL入门(alter语法 与 外键)
  15. JAVA毕业设计河南省农村多元化养老服务管理系统设计与实现计算机源码+lw文档+系统+调试部署+数据库
  16. Win10应用商店被卸载的恢复方法
  17. Android控件浮在最上层的方法
  18. 内九外七皇城四,九门八点一口钟_ywyuan_新浪博客
  19. 开启微信悬浮窗权限有什么用_新版微信功能!微信也可以设置主题皮肤了,不再是单调的白色,这也太好看了吧!...
  20. 三大运营商物联卡哪家网络稳定

热门文章

  1. 考了PMP证后工资大概是多少 ?
  2. 蜂巢 - Thinking in Agile - 我们需要怎样的软件过程(1)
  3. MFC 渐变色背景以及控件透明处理
  4. P3801 红色的幻想乡(树状数组)
  5. html5手机浏览器后退刷新页面,浏览器收到什么样的response就会刷新页面?
  6. 计算机一级考试个人小结作文,个人学期总结作文(精选5篇)
  7. ORA-00205: error in identifying control file, check alert log for more info
  8. 缘灭--HashMap底层原理之1.8put源码篇(三)
  9. openwrt流量控制
  10. oracle 统计一年中每个月数据总和_Oracle 统计某一年中的1-12个月的数据总和(非常实用)...