avatar
s*f
2
原题是:
Implement below function.
int getRandom(int N, int K[])
Constraints:
->K is sorted and contains elements in range [0,N)
->Output should be a random number between [0,N) excuding elements from K
->probability of generated number should be 1/(N-K.length) and not 1/N
-->int uniform(int N) is given which returns random number [0,N) with 1/N
probability for each number.
->No more than O(1) memory
->No more than O(N) time
提供的解法是:
public int randomNumber(int N, int[] K) { // K is sorted
int x = uniform(N - K.length); // 1 .. N - K.length
int last = 0 , i;
for (i = 0; i < K.length; i++) {
if (K[i] - last > x)
return x + last;
x -= (K[i] - last - 1); // we've seen K[i] - last - 1 valid
numbers
last = K[i];
}
return x + K[ K.length-1 ];
}
概率不好,请大家解释下这个算法什么意思,谢谢。
avatar
u*n
3
summer的活动
24 nights才给71K
只有第一个好点
7,000 BONUS POINTS
When you stay your first night by May 31, 2016
avatar
l*n
4
天哪,我简直要疯了,我的儿子最近不知道受什么刺激了,他告诉我自己想变性。他想
当个女孩,作为母亲我听到之后肯定很生气,我觉得他脑子有病,好端端的变什么性,
而且这样会让别人觉得这个孩子有点变态。
他说他就是想变成女孩,你看看那谁谁不是也变成女人了吗,还给我各种举例子。你说
这不是脑子有问题是什么,人家有钱你有吗,再说了儿子是我们家唯一的一个独苗,现
在竟然要变成女孩子这不是搞笑吗?
反正我是肯定不能答应的,况且他现在还这么小知道什么是变性吗?他知道如果真的变
性了意味着什么吗,一个小屁孩整天不知道好好的学习就想这些乱七八糟的事情。他还
信誓旦旦的说这个是他的梦想,他一定要变成女孩子。我说你这就是脑子有病,还变性。
说实话我当时真的是内心的火不打一起处来啊,整天都不知道看的什么乱七八糟的东西
,我就告诉他你还是好好的学习吧,别在想着什么变性了。你们说说现在这个年龄段的
孩子是不是整天都会想一些连七八糟的事情啊。
avatar
t*e
5
躲学校实验室好了
冻死了

【在 a*****n 的大作中提到】
: 心疼呀,交不起电费了。
avatar
c*e
6
It is filled all empty slot with n - k
for example
k = {0, 2, 5} n = 6
Uniform(30 generate random 0 - 3 and mapped to the empty slot as 1, 3, 4 .
avatar
y*i
7
received a mail offer -
spend $4,000 earn 4,000 points
hehe

【在 u***n 的大作中提到】
: summer的活动
: 24 nights才给71K
: 只有第一个好点
: 7,000 BONUS POINTS
: When you stay your first night by May 31, 2016

avatar
g*i
8
可以卖身换电费

【在 a*****n 的大作中提到】
: 心疼呀,交不起电费了。
avatar
e*3
9
说到底这个算法就是迅速根据Uniform(N-K.length)的结果r,找到第r个不在K内部,
但是小于N的数字,最原始的版本是O(N-K.length)复杂度,就是按照顺序在N-K这个
集合里面找对应的数字,但是这样效率太低。
底下的程序就是每个K内部的元素为跳板迅速向前跳跃找到下一个对应的数字,这句话
是精髓:
x -= (K[i] - last - 1); // we've seen K[i] - last - 1 valid numbers
注意这个-1很关键,没有-1的话x + K[ K.length-1]就会是K里面的数字,有了-1的
话,每遇到K里面的一个数字,x + K[ K.length-1]会加1。

【在 s***f 的大作中提到】
: 原题是:
: Implement below function.
: int getRandom(int N, int K[])
: Constraints:
: ->K is sorted and contains elements in range [0,N)
: ->Output should be a random number between [0,N) excuding elements from K
: ->probability of generated number should be 1/(N-K.length) and not 1/N
: -->int uniform(int N) is given which returns random number [0,N) with 1/N
: probability for each number.
: ->No more than O(1) memory

avatar
x*i
10
我也是,我看了3遍,确定不是40000。当时我也是hehe

【在 y****i 的大作中提到】
: received a mail offer -
: spend $4,000 earn 4,000 points
: hehe

avatar
a*n
11
101.5度,靠,根本不敢出门

【在 t*****e 的大作中提到】
: 躲学校实验室好了
: 冻死了

avatar
h*6
12
用O(N-k.length)的空间建一个对应表,然后每次查表就可以了。
avatar
w*1
13
cash + points 能算一个night吗?

【在 u***n 的大作中提到】
: summer的活动
: 24 nights才给71K
: 只有第一个好点
: 7,000 BONUS POINTS
: When you stay your first night by May 31, 2016

avatar
J*n
14
你在vegas?

【在 a*****n 的大作中提到】
: 101.5度,靠,根本不敢出门
avatar
l*8
15
现在还是O(N-K.length)复杂度啊。
可以用O(log K.length)来做吧。

【在 e********3 的大作中提到】
: 说到底这个算法就是迅速根据Uniform(N-K.length)的结果r,找到第r个不在K内部,
: 但是小于N的数字,最原始的版本是O(N-K.length)复杂度,就是按照顺序在N-K这个
: 集合里面找对应的数字,但是这样效率太低。
: 底下的程序就是每个K内部的元素为跳板迅速向前跳跃找到下一个对应的数字,这句话
: 是精髓:
: x -= (K[i] - last - 1); // we've seen K[i] - last - 1 valid numbers
: 注意这个-1很关键,没有-1的话x + K[ K.length-1]就会是K里面的数字,有了-1的
: 话,每遇到K里面的一个数字,x + K[ K.length-1]会加1。

avatar
u*n
16
I don't think so

【在 w*****1 的大作中提到】
: cash + points 能算一个night吗?
avatar
a*n
17
不是,在一个鸟不拉S的地方。

【在 J****n 的大作中提到】
: 你在vegas?
avatar
h*6
18
我提的方法是O(1)啊,只要不限内存,想多快都可以啊。
avatar
x*n
19
IHG点太泛滥了,来源太多,而且容易刷房搞活动,还有bug乱搞。
hyatt点贵因为来源少,开卡不送点,攒点慢,住的店都高级。

【在 u***n 的大作中提到】
: summer的活动
: 24 nights才给71K
: 只有第一个好点
: 7,000 BONUS POINTS
: When you stay your first night by May 31, 2016

avatar
J*n
20
100多度
鸟飞过去就晒焦了
当然鸟不拉屎的地方

【在 a*****n 的大作中提到】
: 不是,在一个鸟不拉S的地方。
avatar
l*8
21
恩,O(N)内存的话,是可以O(1)时间
我前面说的是, 如果限定O(1) extra 存储的话, 可以有O(log K.length) 时间的算
法。

【在 h**6 的大作中提到】
: 我提的方法是O(1)啊,只要不限内存,想多快都可以啊。
avatar
B*5
22
每个人的offer好像不一样,我第一晚只有5,000,总共25晚给7万

【在 u***n 的大作中提到】
: summer的活动
: 24 nights才给71K
: 只有第一个好点
: 7,000 BONUS POINTS
: When you stay your first night by May 31, 2016

avatar
D*9
23
2师兄你好,我回来了

【在 t*****e 的大作中提到】
: 躲学校实验室好了
: 冻死了

avatar
l*8
24
O(1) space, O(log m) time, where m is the length the K array:
int randomNumber(int N, int *K, int m) {
int x = uniform(N - m);
int low = 0, up = m;
while (low < up) {
int mid = low + (up-low)/2;
if (x <= K[mid] - mid)
up = mid;
else
low = mid + 1;
}
return x + up;
}
avatar
o*s
25
re

【在 u***n 的大作中提到】
: summer的活动
: 24 nights才给71K
: 只有第一个好点
: 7,000 BONUS POINTS
: When you stay your first night by May 31, 2016

avatar
d*r
26
这里早上还得穿毛衣。
avatar
h*6
27
厉害!
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。