ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法总结

2022-08-20 23:03:20  阅读:187  来源: 互联网

标签:总结 请求 int ping RecentCounter queue 算法 3000


1.最近请求次数

写一个 RecentCounter 类来计算特定时间范围内最近的请求。

请实现 RecentCounter 类:

  • RecentCounter() 初始化计数器,请求数为 0 。
  • int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。

保证 每次对 ping 的调用都使用比之前更大的 t 值。

题解:根据官网的例子可以可以看出它是吗,每次添加一个时间t,然后判断以往的时间t是否在[t-3000, t]中,即可以用一个数据结构存放这个时间t,然后把不满足条件的t剔除,然后返回个数,注意因为每次对 ping 的调用都使用比之前更大的 t 值。所以可以用一个队列来完成,达到更少的时间复杂度。

package com.chenghaixiang.jianzhi2.day14;

import java.util.ArrayDeque;
import java.util.Queue;

/**
 * @author 程海翔
 * @school 石家庄铁道大学
 */
public class Office042 {
}
//写一个 RecentCounter 类来计算特定时间范围内最近的请求。
//
//请实现 RecentCounter 类:
//
//    RecentCounter() 初始化计数器,请求数为 0 。
//    int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。
//保证 每次对 ping 的调用都使用比之前更大的 t 值。
class RecentCounter {
    //每次对 ping 的调用都使用比之前更大的 t 值。所以可以用队列
    Queue<Integer> queue;
    public RecentCounter() {
        queue=new ArrayDeque<>();
    }

    public int ping(int t) {
        queue.add(t);
        //检索删除所以没有达到区间下限的值
        while (queue.peek()<t-3000){
            //检索并删除此队列的头,如果此队列为空,则返回 null
            queue.poll();
        }
        return queue.size();
    }
    
}
View Code

2.

标签:总结,请求,int,ping,RecentCounter,queue,算法,3000
来源: https://www.cnblogs.com/chenghaixiang/p/16608981.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有