由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问个算法题
相关主题
求解一道数组找最大cycle长度的问题问个老题
sliding window面试题回报版面 L电面-Update
一道面试题。问个小算法
snapchat 面经问个最长递增序列的问题
请问 如何找无序数组里第2大的数问个算法题
Facebook 电面问个事儿 谢谢
问个算法题:寻找两个点之间的所有路径问个超南的题
问个sorting的题目问个面试题
相关话题的讨论汇总
话题: quota话题: 用户话题: update话题: 200话题: min
进入JobHunting版参与讨论
1 (共1页)
c********1
发帖数: 52
1
假设用户不停的发updates 现在想实现一个功能 就是
限制用户10分钟之内 最多发200条update 怎么实现?
f*******t
发帖数: 7549
2
检查第200条的发布时间跟现在相距是不是超过10分钟
c********1
发帖数: 52
3
也就是说对于每个用户 要保存最近的200条?
这个是最优化的方法吗?

【在 f*******t 的大作中提到】
: 检查第200条的发布时间跟现在相距是不是超过10分钟
d**e
发帖数: 6098
4
i think so

【在 c********1 的大作中提到】
: 也就是说对于每个用户 要保存最近的200条?
: 这个是最优化的方法吗?

f*******t
发帖数: 7549
5
update的状态总得保存在什么地方吧

【在 c********1 的大作中提到】
: 也就是说对于每个用户 要保存最近的200条?
: 这个是最优化的方法吗?

c********1
发帖数: 52
6
我们的task不需要保存状态 只需要检查用户的状态
是不是合法 合法的定义就是最近10分钟内是不是发送
了超过200条的status update.
应该是有更优化的方法 假设要求最近10分钟内最多
发送n条 对应每个用户应该是不需要保存n个的。。。

【在 f*******t 的大作中提到】
: update的状态总得保存在什么地方吧
i**********e
发帖数: 1145
7
用一个循环数组。
数组长度由时间的精确度来决定。
比方说,如果要到一秒的精确度的话 size = 600.
保持一个 running sum,也就是数组内的总值。
指针指向数组其中一个位置,然后随着时间往前走。走到当前位置先初始化数组值为0
。(顺便把 running sum 递减)
随着用户发送新信息,增加 running sum 并且 +1 当前数组值。
这样我们随时随地就能立即知道用户是否超过了 200 次发送信息。

【在 c********1 的大作中提到】
: 我们的task不需要保存状态 只需要检查用户的状态
: 是不是合法 合法的定义就是最近10分钟内是不是发送
: 了超过200条的status update.
: 应该是有更优化的方法 假设要求最近10分钟内最多
: 发送n条 对应每个用户应该是不需要保存n个的。。。

c********1
发帖数: 52
8
我知道这个方法 但是好像没有在原来的基础上提高啊
原来我存200个 time stamp
现在存了600个int
总之对于每个用户而言 占用的内存是线性与n的
我们的目的是要把这个线性的空间复杂度变为
const 比如说对于每个用户存3个或者4个数

0

【在 i**********e 的大作中提到】
: 用一个循环数组。
: 数组长度由时间的精确度来决定。
: 比方说,如果要到一秒的精确度的话 size = 600.
: 保持一个 running sum,也就是数组内的总值。
: 指针指向数组其中一个位置,然后随着时间往前走。走到当前位置先初始化数组值为0
: 。(顺便把 running sum 递减)
: 随着用户发送新信息,增加 running sum 并且 +1 当前数组值。
: 这样我们随时随地就能立即知道用户是否超过了 200 次发送信息。

H*M
发帖数: 1268
9
是天外飞仙吗?
只用3个int

【在 c********1 的大作中提到】
: 我知道这个方法 但是好像没有在原来的基础上提高啊
: 原来我存200个 time stamp
: 现在存了600个int
: 总之对于每个用户而言 占用的内存是线性与n的
: 我们的目的是要把这个线性的空间复杂度变为
: const 比如说对于每个用户存3个或者4个数
:
: 0

c********1
发帖数: 52
10
估计是有很巧妙的方法。。。。并且已经用在系统里了。。。
这么关心用户updates 的公司八成你也知道是哪个了
相关主题
Facebook 电面问个老题
问个算法题:寻找两个点之间的所有路径回报版面 L电面-Update
问个sorting的题目问个小算法
进入JobHunting版参与讨论
a**********2
发帖数: 340
11
真的需要这样省空间吗?integer来实现queue?

【在 c********1 的大作中提到】
: 估计是有很巧妙的方法。。。。并且已经用在系统里了。。。
: 这么关心用户updates 的公司八成你也知道是哪个了

r****t
发帖数: 10904
12
就是算个 quota 把,一个用户一个变量 quota, 一个变量 last_t
存上一次 update 的时间就好了。
quota_rate = max_quota / (10*60.)
def new_message(self, msg):
t = now()
quota += (t - self.last_t) * quota_rate
quota = quota if quota <= max_quota else max_quota
quota --
if quota<0:
raise "updates too frequently"
else:
send_msg(msg)
self.last_t = t
m*****k
发帖数: 731
13
so can not post 1 update in min 1st and then idle then update 99 posts in
min 10th?

【在 r****t 的大作中提到】
: 就是算个 quota 把,一个用户一个变量 quota, 一个变量 last_t
: 存上一次 update 的时间就好了。
: quota_rate = max_quota / (10*60.)
: def new_message(self, msg):
: t = now()
: quota += (t - self.last_t) * quota_rate
: quota = quota if quota <= max_quota else max_quota
: quota --
: if quota<0:
: raise "updates too frequently"

n*******w
发帖数: 687
14
改变题意了。题目没有说每分钟的quota是一样的。
题意允许第一分钟把quota用完,接下来9分钟等待。
唯一想到的解法就是1337写的那样。circular queue。
如果要精确到毫秒微妙的话,存每个update以及时间。

【在 r****t 的大作中提到】
: 就是算个 quota 把,一个用户一个变量 quota, 一个变量 last_t
: 存上一次 update 的时间就好了。
: quota_rate = max_quota / (10*60.)
: def new_message(self, msg):
: t = now()
: quota += (t - self.last_t) * quota_rate
: quota = quota if quota <= max_quota else max_quota
: quota --
: if quota<0:
: raise "updates too frequently"

s****j
发帖数: 67
15
直接用stl的deque吧

【在 c********1 的大作中提到】
: 假设用户不停的发updates 现在想实现一个功能 就是
: 限制用户10分钟之内 最多发200条update 怎么实现?

c********1
发帖数: 52
16
要求存储空间跟n没有关系。。。

【在 s****j 的大作中提到】
: 直接用stl的deque吧
s****j
发帖数: 67
17
你说的n是什么?10分钟?还是200条?
deque和这两个都没关系啊
deque记录的是时间
每次push_back的时候check deque的front的时间,和当前时间差大于等于10分钟全部
pop_front,如果此时deque的size大于等于200那就不能push啊,否则就push_back

【在 c********1 的大作中提到】
: 要求存储空间跟n没有关系。。。
s****j
发帖数: 67
18
哦,你意思是要找o(1) space的方法?

【在 c********1 的大作中提到】
: 要求存储空间跟n没有关系。。。
c********1
发帖数: 52
19
n是200 你那样worst case 要存200条time stamp

【在 s****j 的大作中提到】
: 你说的n是什么?10分钟?还是200条?
: deque和这两个都没关系啊
: deque记录的是时间
: 每次push_back的时候check deque的front的时间,和当前时间差大于等于10分钟全部
: pop_front,如果此时deque的size大于等于200那就不能push啊,否则就push_back

g*****i
发帖数: 2162
20
板上以前讨论出来的就是这方法

0

【在 i**********e 的大作中提到】
: 用一个循环数组。
: 数组长度由时间的精确度来决定。
: 比方说,如果要到一秒的精确度的话 size = 600.
: 保持一个 running sum,也就是数组内的总值。
: 指针指向数组其中一个位置,然后随着时间往前走。走到当前位置先初始化数组值为0
: 。(顺便把 running sum 递减)
: 随着用户发送新信息,增加 running sum 并且 +1 当前数组值。
: 这样我们随时随地就能立即知道用户是否超过了 200 次发送信息。

相关主题
问个最长递增序列的问题问个超南的题
问个算法题问个面试题
问个事儿 谢谢问个google面试题
进入JobHunting版参与讨论
c********1
发帖数: 52
21
恩 我知道 我回答的就是这个方法
面试官说可以存const 空间
但是没跟我说怎么做
搞的我最近一直在想这个。。。

【在 g*****i 的大作中提到】
: 板上以前讨论出来的就是这方法
:
: 0

s****j
发帖数: 67
22
恩,我理解你的意思了
O(1)space的暂时没想法
O(n)的就看时间和允许条数哪个大了吧
时间range小就用1337的那个方法

【在 c********1 的大作中提到】
: n是200 你那样worst case 要存200条time stamp
r****t
发帖数: 10904
23
I forgot to make quota a member and init it to 100, that way u can do 1 in
1st min and 99 in the 9th min. just a thought. will check back later.

【在 m*****k 的大作中提到】
: so can not post 1 update in min 1st and then idle then update 99 posts in
: min 10th?

r****t
发帖数: 10904
24
题目没有提到 quota,不过为啥这个解法就不允许第一分钟把quota用完,接下来9分钟
等待呢? 我觉得这个写法对你说的这个情况是没问题的。

【在 n*******w 的大作中提到】
: 改变题意了。题目没有说每分钟的quota是一样的。
: 题意允许第一分钟把quota用完,接下来9分钟等待。
: 唯一想到的解法就是1337写的那样。circular queue。
: 如果要精确到毫秒微妙的话,存每个update以及时间。

n*******w
发帖数: 687
25
那个伪码有一些bug吧。改好了能比较准确的说具体的问题。不然不是完全了解怎么
work。

【在 r****t 的大作中提到】
: 题目没有提到 quota,不过为啥这个解法就不允许第一分钟把quota用完,接下来9分钟
: 等待呢? 我觉得这个写法对你说的这个情况是没问题的。

c********1
发帖数: 52
26
可以解释下算法吗
感觉不太对呢。。。

【在 r****t 的大作中提到】
: 题目没有提到 quota,不过为啥这个解法就不允许第一分钟把quota用完,接下来9分钟
: 等待呢? 我觉得这个写法对你说的这个情况是没问题的。

r****t
发帖数: 10904
27
never mind. I see why my solution only allows n-k msgs in the first minute
for n allowed messages in k minutes.

【在 n*******w 的大作中提到】
: 那个伪码有一些bug吧。改好了能比较准确的说具体的问题。不然不是完全了解怎么
: work。

1 (共1页)
进入JobHunting版参与讨论
相关主题
问个面试题请问 如何找无序数组里第2大的数
问个google面试题Facebook 电面
问个C++ delete[]问题问个算法题:寻找两个点之间的所有路径
what is the internal implementation of Deque问个sorting的题目
求解一道数组找最大cycle长度的问题问个老题
sliding window面试题回报版面 L电面-Update
一道面试题。问个小算法
snapchat 面经问个最长递增序列的问题
相关话题的讨论汇总
话题: quota话题: 用户话题: update话题: 200话题: min