【发布时间】:2015-08-23 18:06:02
【问题描述】:
我最近接受了一次面试,面试官给了我以下场景,并问我将使用什么数据结构来实现它:
您有 100 颗弹珠,每颗弹珠都是红色、蓝色或绿色。弹珠被扔进袋子里,你需要有一些机制来取回随机颜色的弹珠(有替换)。
好的,很简单。在询问了一些关于约束的问题后,我告诉他我会使用一个简单的数组,其中每个桶代表一个弹珠。可以使用随机数函数对数组进行索引,从而生成随机颜色的大理石。
该解决方案很好,但随后他问“如果您有许多不同的颜色,每个颜色都有
找到每种颜色的总和(这将是 O(n),这对于设置来说很好)并设置一个数组,其中每个桶代表每种颜色的累积总和。例如,如果您的弹珠总数为 R:3、B:5、G:1,000,000,000,则数组将类似于 [3] [8] [1,000,000,008]。然后他说你现在可以使用带有随机索引的二进制搜索来获得随机颜色的弹珠,同时仍然保持正确的概率。谁能向我解释为什么会这样?这是否只是一个修改后的二分搜索,它返回高于随机索引的第一个值?
【问题讨论】:
标签: arrays algorithm binary-search