【模拟队列】933. 最近的请求次数

933. 最近的请求次数

解题思路

  • 模拟队列操作
  • 尾指针指向队尾的下一个位置 头指针指向对头
  • 每次Ping操作 将一个元素入队
  • 判断从对头开始遍历判断 当前元素是不是小于t - 3000 如果是 那就停止遍历
  • 返回队列长度

class RecentCounter {
    // 定义一个数组
    int[] nums = new int[10001];

    // 定义头尾指针 
    int front = 0;
    int rear = 0;

    // 初始化 构造函数
    public RecentCounter() {
        front = 0;
        rear = 0;
    }
    
    public int ping(int t) {
        nums[rear] = t;// 元素进入队列

        // 要注意 尾指针始终指向的是一个空位置 不是指向最后一个元素
        rear++;// 队尾执行入队操作

        // 判断是否有元素需要出列

        // 从对头开始遍历元素
        // 也就是判断 对头指向的元素 是不是小于t - 3000
        // 如果是  那么出队
        while(nums[front] < t - 3000){
            front++;// 执行出队操作
        }

        // 计算队列长度  返回 队列长度  不要+1  注意尾指针的位置
        return rear - front;

    }
}

/**
 * Your RecentCounter object will be instantiated and called as such:
 * RecentCounter obj = new RecentCounter();
 * int param_1 = obj.ping(t);
 */

你可能感兴趣的:(#,Leetcode,java,数据结构,开发语言)