您的位置:首页 > 其它

猫狗算法(每日一道算法题)

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();
}
}


参考资料《程序员代码面试指南》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: