• 80 求论坛在线人数


    【本文链接】

    http://www.cnblogs.com/hellogiser/p/online-users.html

    【题目】

    求一个论坛的在线人数,假设有一个论坛,其注册ID有两亿个,每个ID从登陆到退出会向一个日志文件中记下登陆时间和退出时间,要求写一个算法统计一天中论坛的用户在线分布,取样粒度为秒。

    【分析】

    一天总共有 3600*24 = 86400秒。
    定义一个长度为86400的整数数组int delta[86400],每个整数对应这一秒的人数变化值,可能为正也可能为负。开始时将数组元素都初始化为0。
    然后依次读入每个用户的登录时间和退出时间,将与登录时间对应的整数值加1,将与退出时间对应的整数值减1。
    这样处理一遍后数组中存储了每秒中的人数变化情况。
    定义另外一个长度为86400的整数数组int online_num[86400],每个整数对应这一秒的论坛在线人数。
    假设一天开始时论坛在线人数为0,则第1秒的人数online_num[0] = delta[0]。第n+1秒的人数online_num[n] = online_num[n-1] + delta[n]。
    这样我们就获得了一天中任意时间的在线人数。

    【代码】

     C++ Code 
    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
     
    /*
    (s1,e1) (s2,e2) ...(sn,en) (si<ei)
    int LEN = 24*3600 = 86400
    delta[LEN]
    delta[si] ++;
    delta[ei] --;

    online_users[LEN];

    online_users[n] = online_users[n-1] + delta[n]; (1<=n<LEN)
    online_users[0] = delta[0];
    */

    const int LEN = 86400;

    void OnlineUsersCount(vector<int> s, vector<int> e)
    {
        
    if (s.size() != e.size())
            
    return;
        
    int delta[LEN] = {0};
        
    int online_users[LEN] = {0};
        
    // calculate count delta of every seconds
        int i;
        
    for (i = 0; i < s.size(); i++)
        {
            delta[s[i]] ++;
            delta[e[i]] --;
        }

        
    // calculate online users of every seconds
        online_users[0] = delta[0];
        
    for (i = 1; i < LEN; i++)
            online_users[i] = online_users[i - 
    1] + delta[i];
    }

    【参考】

    http://blog.csdn.net/cywosp/article/details/6724567

    http://www.cnblogs.com/sooner/p/3254605.html

  • 相关阅读:
    java的运行机制
    HelloWorld!
    一些简单的Dos命令
    之前自己不是很熟悉的windows快捷键
    MarkDown语法自学笔记
    Amazon Alexa 总览
    AWS Networking 总览
    用图片轻松学Docker
    实务经验分享-AWS Lambda & RDS 整合探讨
    16种设计思想
  • 原文地址:https://www.cnblogs.com/hellogiser/p/online-users.html
Copyright © 2020-2023  润新知