什么是最优雅的方式来抓取我思考的唯一随机数?
现在我需要随机唯一的数字,我使用while循环检查它是否不唯一,看看我以前是否使用过随机数字。
看起来像是:

int n = getRandomNumber % [Array Size];

for each ( Previously used n in list)
    Check if I've used n before, if I have...try again.

有很多方法可以解决这个线性o(n/2)问题,我只是想知道是否有一个优雅的方法来解决它。试着回想一下math115离散数学,并记住这位老讲师是否涉及了一个看似微不足道的问题。
我现在不能思考,所以也许一旦我喝了一些咖啡因,我的大脑就会接受咖啡所带来的高智商。

最佳答案

抓住我思考过的唯一随机数?
创建一个n个唯一元素的数组(例如,0..n-1范围内的整数),将n存储为arraysize和initialarraysize(arraysize=n;initialarraysize=n)
当请求随机数时:
2.1如果arraysize为零,则arraysize=initialarraysize
2.1生成索引=getRandomNuber()%数组大小
2.3结果=数组[索引]。尚未返回结果。
2.2将数组[index]与数组[arraysize-1]交换。交换意味着“交换”c=数组[索引];数组[索引]=数组[数组大小-1];数组[数组大小-1]=c
2.3将数组减少1。
2.4返回结果。
您将得到一个随机数列表,在您用完唯一值之前不会重复。O(1)复杂性。

09-11 17:35