【发布时间】:2015-12-28 05:45:43
【问题描述】:
给定一个数组和一个值 k,编写一个函数以返回等于 k 的元素的索引,概率为 k/sum(输入数组)。假设输入数组中没有重复的数字。
例如,如果输入数组是 1,4,2,3。该函数应具有以下行为:
以 1/10 的概率返回 0;
以 4/10 的概率返回 1;
以 2/10 的概率返回 2;
以 3/10 的概率返回 3;
问题2:如果数组有重复怎么处理?
我在想二进制搜索可以很好地在数组中找到一个元素,但是我还没有弄清楚如何将它与概率联系起来。
已编辑: 正如建议的那样,this question 与我的问题类似。然而,它的解决方案并不是我所期望的。我一直在寻找嵌入二分搜索的解决方案,这可能会降低时间复杂度。
A good solution 关于给定一个键,如何使用二分搜索在排序数组中找到大于键的第一个元素。
【问题讨论】:
-
对数组的大小和作为其元素存储的数字的大小是否有任何限制?
-
没有限制。规模可以很大,数量也可以很大。谢谢你的链接。我在搜索时没有找到它们。然而,在我阅读它们之后,他们的解决方案并不是我所期望的。对数组进行排序是 O(nlogn),我确实喜欢 Juan Lopes 解决方案,它是 O(n),并且 O(cn) 的常数 c 较小。
标签: arrays algorithm probability binary-search