算法练习day8——190326(猫狗队列、转圈打印矩阵、旋转正方形矩阵、反转单向双向链表、数N的加法组合)

本文介绍了如何实现猫狗队列的数据结构,包括添加、删除和检查操作。接着讨论了转圈打印矩阵的算法,以及如何在O(1)额外空间复杂度下旋转正方形矩阵。此外,还探讨了如何反转单向和双向链表,并提供了解决方案。最后,提出了求解整数加法组合的方法。
摘要由CSDN通过智能技术生成

1.猫狗队列

【题目】 宠物、 狗和猫的类如下:

public class Pet {
    private String type;
    public Pet(String type) {
        this.type = type;
    }
    public String getPetType() {
        return this.type;
    }
}

public class Dog extends Pet {
    public Dog() {
        super("dog");
    }
}

public class Cat extends Pet {
    public Cat() {
        super("cat");
    }
}

实现一种狗猫队列的结构, 要求如下:

  • 用户可以调用add方法,将cat类或dog类的实例放入队列中;
  • 用户可以调用pollAll方法, 将队列中所有的实例按照进队列的先后顺序依次弹出;
  • 用户可以调用pollDog方法, 将队列中dog类的实例按照进队列的先后顺序依次弹出;
  • 用户可以调用pollCat方法, 将队列中cat类的实例按照进队列的先后顺序依次弹出;
  • 用户可以调用isEmpty方法, 检查队列中是否还有dog或cat的实例;
  • 用户可以调用isDogEmpty方法, 检查队列中是否有dog类的实例;
  • 用户可以调用isCatEmpty方法, 检查队列中是否有cat类的实例。

1.1 分析

使用两个队列实现:

add():当宠物进入结构时:

  • 若宠物为狗,则进入Dog队列;
  • 若为猫,则进入Cat队列。

pollDog():从Dog队列取头一个狗;

pollCat():从Cat队列取头一个猫;

pollAll():得设置一个计数器count,作为时间戳,进来一个宠物,无论猫狗,count++,赋给这个宠物的count,取出时,由Dog队列和Cat队列的头一个的count来判断哪个宠物进的早点。

isEmpty():Dog队列和Cat队列都为空时返回true;

isDogEmpty():Dog队列为空时返回true;

isDogEmpty():Cat队列为空时返回true;

1.2 代码实现

注:不能更改给定的Pet、Cat、Dog类,需自己写其他的类实现以上功能。

package Solution;

import java.util.LinkedList;
import java.util.Queue;

class Pet {
    private String type;
    public Pet(String type) {
        this.type = type;
    }
    public String getPetType() {
        return this.type;
    }
}

class Dog extends Pet {
    public Dog() {
        super("dog");
    }
}
class Cat extends Pet {
    public Cat() {
        super("cat");
    }
}

class PetQueue{
	private Pet pet;
	private long count;
	
	public PetQueue(Pet pet, long count) {
		this.pet=pet;
		this.count=count;
	}
	
	public Pet getPet() {
		return this.pet;
	}
	
	public long getCount() {
		return this.count;
	}
	
	public String getPetType() {
		return this.pet.getPetType();
	}
}
public class CatDogQueue {
	private Queue<PetQueue> DogQ;
	private Queue<PetQueue> CatQ;
	long count;//计数器
	
	public CatDogQueue() {
		this.DogQ=new LinkedList<PetQueue>();
		this.CatQ=new LinkedList<PetQueue>();
		this.count=0;
	}
	
	public void add(Pet pet) {
                //根据类型入相应的队列
		if(pet.getPetType().equals("
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值