找到随机的国家,但选择人口更多的国家的可能性应该更高

时间:2018-11-20 07:26:24

标签: java algorithm data-structures

我正在处理以下面试问题:

  

如果您获得了国家/地区列表及其相应的人口,   编写一个将返回随机国家/地区的函数,但   该国的人口,则更有可能在   

我想出了以下逻辑:

  

在列表上进行两次遍历。在第一个遍历中,总结所有   每个位置的总人口,即可得出总人口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实现这一点,那么在这里使用的最佳数据结构是什么?

1 个答案:

答案 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();