猫狗算法(每日一道算法题)
2017-11-16 08:56
337 查看
package DogAndCatQueue; /** * @author:MindMrWang *2017年11月16日 *:function: */ public class Pet { String type; public Pet(String type) { this.type=type; } public String getPetType() { return this.type; } }
package DogAndCatQueue; /** * @author:MindMrWang *2017年11月16日 *:function: */ public class Dog extends Pet{ public Dog() { super("dog"); } }
package DogAndCatQueue; /** * @author:MindMrWang *2017年11月16日 *:function: */ public class Cat extends Pet{ public Cat() { super("cat"); } }
要求:
①用户可以调用add方法将cat类或者dog类的实例放入队列。
②用户可以调用pollAll方法将队列中所有的实例按照队列的先后顺序依次弹出。
③用户可以调用pollCat方法经队列中所有Cat实例按照队列的先后顺序与依次弹出。
④用户可以调用pollDog方法经队列中所有Dog实例按照队列的先后顺序与依次弹出。
⑤用户可以调用isEmpty方法判断队列是否为空。
⑥用户可以调用isDogEmpty方法,检查队列中是否有Dog实例。
⑦用户可以调用isCatEmpty方法,检查队列中是否有Cat实例。
本题需要将不同的实例盖上时间戳(进队的序号),但是又不能改变原有的Pet类,所以我们自定义一个类:
package DogAndCatQueue; /** * @author:MindMrWang *2017年11月16日 *:function:将不同的实例盖上时间戳 */ public class PetEnterQueue { Pet type; long count; public PetEnterQueue(Pet type,long count) { this.type=type; this.count=count; } public Pet getType() { return type; } public long getCount() { return count; } public String getEnterPetType() { return this.type.getPetType(); } }
package DogAndCatQueue; import java.util.LinkedList; import java.util.Queue; /** * @author:MindMrWang *2017年11月16日 *:function:猫狗算法 */ public class DogAndCatQueue { private Queue<PetEnterQueue> dogQ; private Queue<PetEnterQueue> catQ; long count; public DogAndCatQueue() { dogQ = new LinkedList<PetEnterQueue>(); catQ = new LinkedList<PetEnterQueue>(); this.count=0; } public void add(Pet pet) { if(pet.getPetType().equals("cat")) { catQ.add(new PetEnterQueue(pet,this.count++)); }else if(pet.getPetType().equals("dog")) { dogQ.add(new PetEnterQueue(pet,this.count++)); }else { throw new RuntimeException("error ,not cat or dog"); } } public Pet pollAll() { if(!dogQ.isEmpty()&&!catQ.isEmpty()) { if(dogQ.peek().count<catQ.peek().count) { return dogQ.poll().getType(); }else { return catQ.poll().getType(); } }else if(!dogQ.isEmpty()){ return dogQ.poll().getType(); }else if(!catQ.isEmpty()) { return catQ.poll().getType(); }else { throw new RuntimeException("your queue is Empty"); } } public Dog pollDog() { if(!dogQ.isEmpty()) { return (Dog)dogQ.poll().getType(); }else { throw new RuntimeException("your queue is Empty"); } } public Cat pollCat() { if(!dogQ.isEmpty()) { return (Cat)catQ.poll().getType(); }else { throw new RuntimeException("your queue is Empty"); } } public boolean isEmpty() { return dogQ.isEmpty()&&catQ.isEmpty(); } public boolean isDogQueueEmpty() { return dogQ.isEmpty(); } public boolean isCatQueueEmpty() { return catQ.isEmpty(); } }
参考资料《程序员代码面试指南》
相关文章推荐
- 每日一道算法题1 ——把二元查找树转变成排序的双向链表
- 每日一道算法题5——翻转句子中单词的顺序
- 每日一道算法题7—— 查找最大(小)的k个元素
- 每日一道算法题:寻找丑数
- 每日一道算法题:a~z包括大小写与0~9组成的N个数,用最快的方式把其中重复的元素挑出来。
- 【每日一道算法题】
- 每日一道算法题6——判断整数序列是不是二元查找树的后序遍历结果
- 每日一道算法题——最长回文字串
- 每日一道算法题(1)
- 数据结构与算法,每日一道
- 用栈实现队列(每日一道算法题)
- 每日一道算法题(5)
- 每日一道算法题——1
- 每日一道算法题:微软面试题:在排序数组中,找出给定数字出现的次数
- 数据结构与算法,每日一道
- 每日一道算法题(4)
- 用一个栈实现另一个栈的排序(每日一道算法题)
- 数据结构与算法,每日一道
- 每日一道算法题——Longest Valid Parentheses
- 每日一道算法题:求N个整数的最大公约数