随机生成n个唯一数字

Wei*_*ung 0 c++ random shuffle

如果我想从0到999生成1000个唯一的数字,我该怎么办?
我的第一次尝试是创建一个数组{0,1,2,...,999}并用它std::random_shuffle来洗牌.但是,由于我必须在长循环中生成数字,让我们说O(10 ^ 7),这种方法将压倒运行时间.
有没有更好的方法来解决这个问题?

i C*_*ood 5

如果您存储了1000个数字的数组,并且std::random_shuffle每次需要在循环中调用,那么这实际上是您能够以您需要的方式生成1000个随机唯一数字的最快方式.您不需要每次都重新创建阵列.

你的循环是否有O(10 ^ 7)次迭代并不重要,因为如果要按照你所说的那样使用这1000个整数,那么它就需要O(n)运算来遍历每一个这些数字在您使用它们时.std::random_shuffle时间复杂度也是O(n)所以它不会让你慢下来.