gpt4 book ai didi

java - 在 O(1) 中返回数组中的随机数并创建单个排列的算法/函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:42:43 26 4
gpt4 key购买 nike

<分区>

简介:这是我遇到的一个面试问题,但我无法解决。代码解决方案会很好(使用任何语言),但算法/伪代码也很棒。


问题:这个问题是关于设计一个解决以下问题的算法:
给你一个函数 int getRand(int x)得到 int x并返回 int0 的范围内至 x随机(独家 -> [0, k) )。每次调用getRand() O(1) 中执行 时间。您还获得了一个数组 int[] arr尺寸k包含整数。

写一个函数getRandUnique()调用时会从 arr 返回一个随机成员这样在 k 之后准确地请求您将拥有 arr 的成员的完整排列(这实际上意味着 getRandUnique() 将在每次调用时返回 arr 的一个不同成员)。每次调用getRandUnique()必须在 O(1) 中执行 时间。
您可以使用/存储全局变量等...

例如:假设 arr = [2, 3, 5 , 1] .调用 getRandUnique()将返回 2, 3, 5, 11/4可能性。随后调用 getRandUnique()将返回剩余的 3 1/3 中的成员概率等等...


尝试:我实际上solved this myself (经过反复试验)并发布了解决方案“Q&A Style”。我很想得到一些其他可能的想法/解决方案。我会接受任何作为正确答案的解决方案(我不想接受我自己的)!


问题:如何在上述所有限制的情况下实现这一点?

编辑:现在我知道这个问题对应于 Fisher–Yates shuffle ,尽管这里的规范有点不同/更严格。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com