我正在处理以下面试问题:
如果您获得了国家/地区列表及其相应的人口, 编写一个将返回随机国家/地区的函数,但 该国的人口,则更有可能在
我想出了以下逻辑:
在列表上进行两次遍历。在第一个遍历中,总结所有 每个位置的总人口,即可得出总人口TOTAL_POP。在 第二次迭代,计算每个位置人口的百分比 针对TOTAL_POP。例如,如果位置A的人口为“ a”。 A的人口百分比为(a / TOTAL_POP)* 100。
让我们说,在完成这些步骤之后,我们具有以下值。位置A = 35%B = 22%C = 19%D = 20%E = 4%
请注意,百分比总计应为100。
现在,随机生成一个介于1到100之间的数字'n'。
如果1 <= n <= 35 OUTPUT A 36 <= n <= 57 OUTPUT B
有没有更好的方法来解决此问题?算法或代码都可以。另外,如果我们要用Java实现这一点,那么在这里使用的最佳数据结构是什么?
答案 0 :(得分:1)
您可以为此使用TreeMap
,它是O(log n)并且具有方便的api。像这样:
TreeMap<Integer, Country> map = new TreeMap<>();
map.put(percentCountry1, country1);
map.put(percentCountry1 + percentCountry2, country2);
// ...
int random = (new Random()).nextInt(100);
Country country = map.ceilingEntry(random).getValue();