面试冲刺:09---设计一个算法统计一个论坛中用户的在线分布情况(取样粒度为秒)
其他
2020-08-03 13:34:24
阅读次数: 0
一、题目描述
- 有一个论坛,其注册ID有两亿个,每个ID登陆和退出都会向日志中写入登陆和退出的时间
- 现要求:写一个算法统计一天中论坛的用户在线分布(取样粒度为秒),也就是在指定秒
二、解析
- 因为每一秒钟可能会有很多的用户不提的退出与登录,因此不能简单的将前一秒的在线人数“加上当前秒的登录人数”或者“减去当前秒的退出人数”
三、答案
- 第一步:一天总共有 3600*24=86400 秒
- 第二步:定义一个长度为 86400 的整数数组int delta[86400],每个索引对应这一秒的人数变化值,也就是该秒登陆人数与退出人数的差值(因此可能为正也可能为负)
- 第三步:开始时将数组元素都初始化为 0,然后依次读入每个用户的登录时间和退出时间
- 找到这个用户的登陆时间对应在一天中的秒数,然后将delta数组对应的索引处值加1
- 找到这个用户的退出时间对应在一天中的秒数,然后将delta数组对应的索引处值减1
- 第四步:这样处理一遍后delta数组中存储了每秒中的人数变化情况(可为正可为负)
- 第五步:定义另外一个长度为 86400 的整数数组 int online_num[86400],每个整数对应这一秒的论坛在线人数
- 第六步:假设一天开始时论坛在线人数为 0,则:
- 第1秒的人数online_num[0] = delta[0]
- 第2秒的人数online_num[1] = online_num[0] + delta[1](如果delta[1]为负,则分布线下降(在线人数变少);如果delta[1]为正,则分布线上升(在线人数变多))
- ......以此类推
- 第n+1秒的人数online_num[n] = online_num[n-1] + delta[n]
- 这样我们就获得了一天中任意时间的在线人数
转载自blog.csdn.net/qq_41453285/article/details/107724059