• 剑指 Offer II 042. 最近请求次数-队列法


    剑指 Offer II 042. 最近请求次数

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

    请实现 RecentCounter 类:

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

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

    示例:

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

    解释:
    RecentCounter recentCounter = new RecentCounter();
    recentCounter.ping(1); // requests = [1],范围是 [-2999,1],返回 1
    recentCounter.ping(100); // requests = [1, 100],范围是 [-2900,100],返回 2
    recentCounter.ping(3001); // requests = [1, 100, 3001],范围是 [1,3001],返回 3
    recentCounter.ping(3002); // requests = [1, 100, 3001, 3002],范围是 [2,3002],返回 3

    这题因为数据集给的简单,所以我们可以不需要优化算法,感兴趣的同学,可以尝试优化下面算法:

    typedef struct {
        int queue[30000];
        int front;
        int rear;
    
    } RecentCounter;
    
    
    RecentCounter* recentCounterCreate() {
        RecentCounter *R =(RecentCounter* )malloc(sizeof(RecentCounter));
        R->front=0;
        R->rear=0;
        return R;
    
    
    }
    
    int recentCounterPing(RecentCounter* obj, int t) {
        obj->queue[obj->rear%30000]=t;
        obj->rear=(obj->rear+1)%30000;
        int count=0;
        for(int i=obj->front;i%30000!=obj->rear%30000;i++){
            if(t-3000<=obj->queue[i%30000]){
                count++;
            }
            else{
                obj->front=(obj->front+1)%30000;
            }
            
        }
        return count;
        
    
    }
    
    void recentCounterFree(RecentCounter* obj) {
    
    }
    
    /**
     * Your RecentCounter struct will be instantiated and called as such:
     * RecentCounter* obj = recentCounterCreate();
     * int param_1 = recentCounterPing(obj, t);
     
     * recentCounterFree(obj);
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
  • 相关阅读:
    数学笔记;离散傅里叶变化 DFT
    莞中 2022暑假训练题01 最小费用最大流
    MongoDB 中的锁分析
    ROS小车——创建ROS功能包(6)【ROS保姆注释教学】
    贪心算法之活动安排问题
    K8S之使用Deployment实现滚动更新
    Spring – 记录传入请求
    JVM(二十一)—— 垃圾回收器(一)
    如何记账 分享记账的作用
    温故知新:dfs模板-843. n-皇后问题
  • 原文地址:https://blog.csdn.net/weixin_43327597/article/details/126263911