玩家在线时长统计
一月 30, 2019
问题来源
最近服务端在做数据统计时遇到这个问题,我对算法有点兴趣,便动手弄起来。
问题描述
一个账号有多个角色,通过角色的在线时长统计玩家的在线时长,多个角色如果有叠加的部分只能算一份。
一个平台账号登录,可以创建多个角色进入游戏,同个角色不能在两台设备上同时玩游戏。同个账号不同角色可以在不同设备上进行游戏。
一个玩家有多个角色,多个角色可以在不同的机器同时进行游戏。两个角色同时在线时间,不能叠加计算
假如有一个角色在线时间是 7点10分-8点10分在线,10点20分-12点20分在线。 当天的角色在线时长是 3小时。
另外个角色时间段比如 7点20分-8点20分在线,当天角色在线时长是1小时
这样,玩家在线时长总和是, 1个小时10分 + 2小时 = 3小时10分
解决方法
本人方法比较笨戳
把一天的时间分成片段,五分钟一个片段,一天就有288个片段,从0到288。用位数组来存储288个片段,如果那个位是1则在线,如果是0则不在线。
每天会给角色计算位数组,比如10点到11点在线,那120 - 132片段是记为1。
假如角色A的部分片段是0110110
角色B的部分片段是0001010
那么玩家的在线时长是A或B 0111110
计算玩家在线时长测试代码
1 | public void testBit(){ |
查看评论