OJ题-设计循环队列(力扣)

题目:
在这里插入图片描述

思路:
不是每次都进行数字搬移(直到后面没空间了再一次性搬移到前面)
在这里插入图片描述

//数组中实现对列
class MyCircularQueue {
    private int[] array;//存储空间
    private int size;//当前数据个数
    private int front;//指向队首下标
    private int rear;//指向队尾下一个可用空间
    /** Initialize your data structure here. Set the size of the queue to be k. */
    public MyCircularQueue(int k) {//容量
        array = new int[k];
        size = 0;
        front = 0;
        rear = 0;
    }
    /** Insert an element into the circular queue. Return true if the operation is successful. */
    public boolean enQueue(int value) {//插入成功返回true
        if (size == array.length) {//满了不成功
            return false;
        }

        array[rear] = value;//代表一个值
        rear = (rear + 1) % array.length;
        size++;
        /*=array[size]=val;size++;
           if(size==array.length){size=0;}
        */

        return true;
    }    
    /** Delete an element from the circular queue. Return true if the operation is successful. */
    public boolean deQueue() {
        if (size == 0) {
            return false;
        }
        front = (front + 1) % array.length;//出队列front往后走一个
        size--;
        return true;
    }    
    /** Get the front item from the queue. */
    public int Front() {//返回队首元素
        if (size == 0) {
            return -1;
        }
        return array[front];
    }    
    /** Get the last item from the queue. */
    public int Rear() {//返回队尾元素
        if (size == 0) {
            return -1;
        }
        int index = (rear + array.length - 1) % array.length;
        return array[index];
    }   
    /** Checks whether the circular queue is empty or not. */
    public boolean isEmpty() {//判断是否为空
         return size == 0;//size=0一定为空;size有值不为空
    }    
    /** Checks whether the circular queue is full or not. */
    public boolean isFull() {//判断队列是否已满
        return size == array.length;//已满
    }
}
/**
 * Your MyCircularQueue object will be instantiated and called as such:
 * MyCircularQueue obj = new MyCircularQueue(k);
 * boolean param_1 = obj.enQueue(value);
 * boolean param_2 = obj.deQueue();
 * int param_3 = obj.Front();
 * int param_4 = obj.Rear();
 * boolean param_5 = obj.isEmpty();
 * boolean param_6 = obj.isFull();
 */

执行结果:
在这里插入图片描述

杭州电子科技大学在线评测系统(杭电OJ)中的目1000-1100是一系列编程,我将分别进行回答。 1000是一个简单的入门,要求计算两个整数的和。我们可以使用一个简单的算法,读取输入的两个整数,然后将它们相加,最后输出结果即可。 1001是一个稍微复杂一些的目,要求实现字符串的逆序输出。我们可以使用一个循环来逐个读取输入的字符,然后将这些字符存储在一个数组中。最后,我们可以倒序遍历数组并将字符依次输出,实现字符串的逆序输出。 1002是一个求最大公约数的问。我们可以使用辗转相除法来解决,即先求出两个数的余数,然后将被除数更新为除数,将除数更新为余数,直至两个数的余数为0。最后的被除数就是最大公约数。 1003是一个比较简单的排序问。我们可以使用冒泡排序算法来解决,即每次比较相邻的两个元素,如果它们的顺序错误就交换它们的位置。重复这个过程直至整个数组有序。 1100是一个动态规划问,要求计算给定序列中的最长上升子序列的长度。我们可以使用一个数组dp来保存到达每个位置的最长上升子序列的长度。每当遍历到一个位置时,我们可以将其和之前的位置比较,如果比之前位置的值大,则将其更新为之前位置的值加1,最后返回dp数组的最大值即可。 以上是对杭电OJ1000-1100目的简要回答,涉及了一些基本的编程知识和算法思想。希望对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值