398:随机数索引

题意

给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引。 您可以假设给定的数字一定存在于数组中。

注意

数组大小可能非常大。 使用太多额外空间的解决方案将不会通过测试。

示例

int[] nums = new int[] {1,2,3,3,3};
Solution solution = new Solution(nums);

// pick(3) 应该返回索引 2,3 或者 4。每个索引的返回概率应该相等。
solution.pick(3);

// pick(1) 应该返回 0。因为只有nums[0]等于1。
solution.pick(1);

问题: 如何在无限序列中随机抽取元素

结论:如果有n个元素,第i次选择第i个元素的概率为\frac {1}{i},第i+1次仍然保持该元素的概率为1-\frac {1}{i+1}(因为当前选择第i+1个元素的概率为\frac {1}{i+1}.因此如果有n个元素,其选择第i个元素的最终概率为:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 题目 (https://leetcode-cn.com/problems/random-pick-index/)给...
    Mastergad阅读 2,738评论 0 0
  • 题目描述 [随机数索引] 给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引。 您可以假设给定的数字...
    一只可爱的柠檬树阅读 1,360评论 0 0
  • 题目 难度:★★☆☆☆类型:数组方法:数学 力扣链接请移步本题传送门更多力扣中等题的解决方案请移步力扣中等题目录 ...
    玖月晴阅读 3,283评论 0 0
  • 蓄水池算法 给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引。 您可以假设给定的数字一定存在于数组...
    编程小王子AAA阅读 2,701评论 0 0
  • 题目描述 给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引。 您可以假设给定的数字一定存在于数组中...
    1只特立独行的猪阅读 1,706评论 0 0

友情链接更多精彩内容