b******n 发帖数: 1629 | 1 感觉要挂。
一个server,每有人访问call log_hit(). 然后另一个函数get_log_hit_5_min()返回
近五分钟的访问数.
我傻哈哈的搞了个这个。结果要求常数时间返回,说我搞得太复杂
class hit
{
Time tag;
}
vector hit_list;
hit_log()
{
hit_list.push_back(hit);
}
int get_hit_5_min()
{
count = 0;
for (int i = hit_list.size() - 1; i >= 0; --i)
{
if (time_diff(hit[i].tag, current_time()) > 5)
count++;
else
break;
}
return count;
}
因为比如访问量很大,会有存储限制,然后改成这个,不知道还有没有更好的办法。匆
匆结束。
int count;
Time start_time;
hit_log()
{
int diff = time_diff(currenttime, start_time);
if (diff > 5)
{
count = count * 5 / diff;
start_time = curenttime - 5;
}
count++;
}
get_hit_5_mint()
{
return count;
} |
a********5 发帖数: 1631 | 2 我2年前也是这个题。。。也是跪了。。
【在 b******n 的大作中提到】 : 感觉要挂。 : 一个server,每有人访问call log_hit(). 然后另一个函数get_log_hit_5_min()返回 : 近五分钟的访问数. : 我傻哈哈的搞了个这个。结果要求常数时间返回,说我搞得太复杂 : class hit : { : Time tag; : } : vector hit_list; : hit_log()
|
s*******h 发帖数: 3219 | |
b******n 发帖数: 1629 | 4 白人
【在 s*******h 的大作中提到】 : 是不是老印出的题
|
i*****h 发帖数: 1534 | |
V******J 发帖数: 9 | |
l*****a 发帖数: 14598 | 7 circular array, just keep the hit count in the pass 300 seconds
【在 b******n 的大作中提到】 : 感觉要挂。 : 一个server,每有人访问call log_hit(). 然后另一个函数get_log_hit_5_min()返回 : 近五分钟的访问数. : 我傻哈哈的搞了个这个。结果要求常数时间返回,说我搞得太复杂 : class hit : { : Time tag; : } : vector hit_list; : hit_log()
|
d******e 发帖数: 2265 | 8 python用deque
插入同时popleft
查询直接给出len(deque)
【在 b******n 的大作中提到】 : 感觉要挂。 : 一个server,每有人访问call log_hit(). 然后另一个函数get_log_hit_5_min()返回 : 近五分钟的访问数. : 我傻哈哈的搞了个这个。结果要求常数时间返回,说我搞得太复杂 : class hit : { : Time tag; : } : vector hit_list; : hit_log()
|
t**r 发帖数: 3428 | 9 java直接用deque.
push新东西。
pop过期的。
.size() 可以得到大小 |