a********r 发帖数: 218 | 1 Random city:
Given cities and their population, write a method that returns a city
randomly weighted by population.
Example: For the following data: [“Seattle:60”, “Spokane:21”, “Olympia:
5”], the method would return ‘Seattle’ most often, and Olympia the least
often.
You are given the following class to work with:
class City {
String name;
int population;
}
You can make use of an API-provided random() method which returns a random
double value [0..1) (zero inclusive; one exclusive), e.g. Math.random() |
z****e 发帖数: 54598 | |
a********r 发帖数: 218 | 3 米高蜥蜴大牛:
给个code让菜鸟学习学习
【在 z****e 的大作中提到】 : ? : 这题很简单吧?
|
A*****i 发帖数: 3587 | 4 三个数值加起来从里面pickup不就完了么,在哪个range里面就弹哪个 |
s******y 发帖数: 936 | 5 越界处理呢? 数据太大怎么办
【在 A*****i 的大作中提到】 : 三个数值加起来从里面pickup不就完了么,在哪个range里面就弹哪个
|
A*****i 发帖数: 3587 | 6 同比例缩小,用double?
【在 s******y 的大作中提到】 : 越界处理呢? 数据太大怎么办
|
z****e 发帖数: 54598 | 7 BigInteger
【在 A*****i 的大作中提到】 : 同比例缩小,用double?
|
a********r 发帖数: 218 | 8 蛋疼帝大牛
能不能用题目中的例子给菜鸟具体讲讲
”在哪个range里面就弹哪个“ |
A*****i 发帖数: 3587 | 9 三个人口数相加作为随机数的范围,如果随机数出来在1到60之间就选择西雅图,以此
类推
【在 a********r 的大作中提到】 : 蛋疼帝大牛 : 能不能用题目中的例子给菜鸟具体讲讲 : ”在哪个range里面就弹哪个“
|
s******y 发帖数: 936 | 10 你这个算法理论上来说行得通,如果有1000个城市,每个城市的人口是100k - 10m,那
你这个算法需要优化吧。
【在 A*****i 的大作中提到】 : 三个人口数相加作为随机数的范围,如果随机数出来在1到60之间就选择西雅图,以此 : 类推
|
|
|
A*****i 发帖数: 3587 | 11 按比例缩小10^n倍然后用double的random来做
或者用赵策说的BigInteger。
【在 s******y 的大作中提到】 : 你这个算法理论上来说行得通,如果有1000个城市,每个城市的人口是100k - 10m,那 : 你这个算法需要优化吧。
|
s******y 发帖数: 936 | 12 random 出来 你怎么选择城市呢?
【在 A*****i 的大作中提到】 : 按比例缩小10^n倍然后用double的random来做 : 或者用赵策说的BigInteger。
|
a********r 发帖数: 218 | 13 参照Seattle:60”, “Spokane:21”, “Olympia:5
如果随机出来是4, 选择Seattle 还是选择Olympia?
【在 s******y 的大作中提到】 : random 出来 你怎么选择城市呢?
|
l*****a 发帖数: 14598 | 14 seattle (0,60]
Spokane: (60,81]
Olympia (81,86]
落到那个里就是哪个
只有三个的话,不要告诉我你落到87
【在 a********r 的大作中提到】 : 参照Seattle:60”, “Spokane:21”, “Olympia:5 : 如果随机出来是4, 选择Seattle 还是选择Olympia?
|
z****e 发帖数: 54598 | 15 [0,60)
【在 l*****a 的大作中提到】 : seattle (0,60] : Spokane: (60,81] : Olympia (81,86] : 落到那个里就是哪个 : 只有三个的话,不要告诉我你落到87
|
a********r 发帖数: 218 | 16 长期骑驴,一直找马大牛,
你讲的好清楚,谢谢
这样的话,要先把城市按照人口由多到少排序?
【在 l*****a 的大作中提到】 : seattle (0,60] : Spokane: (60,81] : Olympia (81,86] : 落到那个里就是哪个 : 只有三个的话,不要告诉我你落到87
|
A*****i 发帖数: 3587 | 17 不用排序,只要知道每个城市所在的区域就行了,顺序无所谓
【在 a********r 的大作中提到】 : 长期骑驴,一直找马大牛, : 你讲的好清楚,谢谢 : 这样的话,要先把城市按照人口由多到少排序?
|
a********r 发帖数: 218 | 18 蛋疼帝大牛:
不排序, 你如何知道Spokane的区域是 (60,81]?
【在 A*****i 的大作中提到】 : 不用排序,只要知道每个城市所在的区域就行了,顺序无所谓
|
l*****a 发帖数: 14598 | 19 不就是挨个加吗,不要想得那么复杂
【在 a********r 的大作中提到】 : 蛋疼帝大牛: : 不排序, 你如何知道Spokane的区域是 (60,81]?
|
h*******o 发帖数: 4 | 20 挨个用人口数/总人口数,位置可以按顺序选。60+21+5=86.
(0,60/86]就第一个城,(60/86, 81/86]第二个,(81/86,1]第三个。 81=60+21 |