(双指针滑动窗口)AcWing 1238. 日志统计

简介: (双指针滑动窗口)AcWing 1238. 日志统计

做题时和其他题混淆了,用了枚举日志的方法,只维护了相邻的两个点赞的信息


acwing外卖店优先级https://www.acwing.com/problem/content/description/1243/

pta银行排队问题之单队列多窗口服务https://pintia.cn/problem-sets/1635264548121292800/exam/problems/1636695635989049353


三者的共同点是题目输入都给了一个时间和id的二元组

且看题干都是要遍历一遍这个二元组的


不同的点是日志统计这个题,给出一个固定的区间,赞的间隔要在这个区间内才算数,右边界更新后,左边的数不能抛弃不管,需要记录在这个区间左右边界的赞的时间,要有个指针指向左边界并且根据右边界的移动而不断移动,恰巧就符合双指针滑动窗口的特征

9c1ef43f86ab48ac9c8860b372a20d2c.png

而外卖店优先级对订单(“赞”)的间隔是没有一个固定的要求的,只需要记录前面的订单(赞)给后面遗留了一个什么样的状态,根据两个相邻订单a,b(“赞”)的时间间隔来更新这个状态,并遗留给下一个订单c(“赞”),遗留过后,a就对后面的订单没有任何影响,可以彻底抛弃不管了

d8ac831cd4484c25afca0381bfc8bcf9.png

二刷卡壳,最后输出时i的范围写错了,没有走流程对比题干

代码

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N  = 1e5 + 10;
int t[N];
struct Tiezi{
    int ts,id;
    bool operator<(Tiezi w){
        return ts < w.ts;
    }
}tiezi[N];
bool st[N];
int cnt[N];
int main(){
    int n,d,k;
    cin >> n >> d >> k;
    int ts,id;
    for(int i= 0;i < n;i++){
        cin >> ts >> id;
        tiezi[i] = {ts,id};
    }
    sort(tiezi,tiezi+n);
    for(int i = 0,j = 0;j < n;j++){
        // 加的是j指针的帖子,所以j要从0开始
        int id = tiezi[j].id;
        int ts = tiezi[j].ts;
        cnt[id]++;
        while(ts - tiezi[i].ts >= d){
            cnt[tiezi[i].id] -= 1;
            i++;
        }
        if(cnt[id] >= k) st[id] = true;
        // cout << cnt[1] << endl;
    }
    for(int i = 0;i < N;i++){
        if(st[i]) cout << i << endl;
    }
    return 0;
}
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
6天前
|
存储 算法
LeetCode刷题---209. 长度最小的子数组(双指针-滑动窗口)
LeetCode刷题---209. 长度最小的子数组(双指针-滑动窗口)
|
6天前
|
算法 容器 NoSQL
双指针扫描、滑动窗口
双指针扫描、滑动窗口
|
6天前
|
SQL 大数据 API
每天一道大厂SQL题【Day08】服务日志SQL统计
每天一道大厂SQL题【Day08】服务日志SQL统计
44 0
|
6天前
|
索引
LeetCode438题(无敌双指针——滑动窗口)
LeetCode438题(无敌双指针——滑动窗口)
|
6天前
|
存储 弹性计算 运维
统计/var/log 有多少个文件
【4月更文挑战第29天】
23 1
|
6天前
|
存储
【Leetcode 209】长度最小的子数组 —— 滑动窗口|双指针
我们可以使用双指针解决本题,定义两个指针 i 和 j 分别表示子数组(滑动窗口窗口)的开始位置和结束位置,维护变量 sum 存储子数组中的元素和。每一轮迭代中,每当 sum >= target 则记录子数组最小长度,移动慢指针。在每一轮迭代最后,移动快指针
|
6天前
|
Java 程序员 C++
日志统计(蓝桥杯每日一题)
日志统计(蓝桥杯每日一题)
31 1
|
6天前
|
Java 程序员 C++
日志统计(每日一题)
日志统计(每日一题)
25 0
|
11月前
|
Java Shell Perl
从 test.log 中截取当天的所有 gc 信息日志,并统计 gc 时间的平均值和时长最长的时间
从 test.log 中截取当天的所有 gc 信息日志,并统计 gc 时间的平均值和时长最长的时间
91 1
|
11月前
|
存储 机器学习/深度学习 程序员
蓝桥杯-日志统计-python
蓝桥杯-日志统计-python
60 0

热门文章

最新文章