• 933. 最近的请求次数


    写一个 RecentCounter 类来计算最近的请求。

    它只有一个方法:ping(int t),其中 t 代表以毫秒为单位的某个时间。

    返回从 3000 毫秒前到现在的 ping 数。

    任何处于 [t - 3000, t] 时间范围之内的 ping 都将会被计算在内,包括当前(指 t 时刻)的 ping

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

    示例:

    输入:inputs = ["RecentCounter","ping","ping","ping","ping"], inputs = [[],[1],[100],[3001],[3002]]
    输出:[null,1,2,3,3]

    提示:

    1. 每个测试用例最多调用 10000 次 ping
    2. 每个测试用例会使用严格递增的 t 值来调用 ping
    3. 每次调用 ping 都有 1 <= t <= 10^9
    4. class RecentCounter {
      
          public RecentCounter() {
               
          }
          
          int[] rds = new int[10000];
          int cnt=-1;
          int i=0;
          public int ping(int t) {
              cnt++;
              rds[cnt]=t;
                  //不用每次都遍历,下次的i就是前面最后的i
              for( ;i<=cnt;++i){
                  if(rds[i]>=t-3000) break;
              }
              return cnt-i+1;
          }
      }

      思路:直接用数组来存储t,因为数组是严格递增的所以判断if(rds[i]>=t-3000) break; 就是最近的索引,因为t是严格递增的所以可以利用之前的已经查询的结果(用一个全局变量i缓存,下次循环还是从i开始遍历),这样可以节约很多时间。尽量别用自带的队列数据结构,开销太大。目前beat 100% 。

  • 相关阅读:
    分布式一致性模型
    ubuntu18.04 基于Hadoop3.1.2集群的Hbase2.0.6集群搭建
    ubuntu18.04 flink-1.9.0 Standalone集群搭建
    Idea 打印GC
    goroutine简介
    MESI缓存一致性协议
    Spark RDD 算子总结
    SparkStreaming 笔记
    Spark 内存管理
    Highcharts(数据分析图)
  • 原文地址:https://www.cnblogs.com/chen-jack/p/9932957.html
Copyright © 2020-2023  润新知