在java中生成50万个唯一整数

在java中生成50万个唯一整数,java,algorithm,time-complexity,space-complexity,Java,Algorithm,Time Complexity,Space Complexity,我希望生成50万个范围在1到100万之间的唯一随机整数。数字必须是唯一的,我希望它至少在线性时间内,并且不使用太多内存。有人能想出解决办法吗?像以前一样,你可以洗牌数字,然后拉动前半部分,使其唯一。这是线性的,因为洗牌是O(n),第一部分是O(n/2) Hare是该线程的一个修改实现。这将打印范围为1-1m的500k唯一随机数 import java.util.ArrayList; import java.util.Collections; public class UniqueRandomN

我希望生成50万个范围在1到100万之间的唯一随机整数。数字必须是唯一的,我希望它至少在线性时间内,并且不使用太多内存。有人能想出解决办法吗?

像以前一样,你可以洗牌数字,然后拉动前半部分,使其唯一。这是线性的,因为洗牌是
O(n)
,第一部分是
O(n/2)

Hare是该线程的一个修改实现。这将打印范围为1-1m的500k唯一随机数

import java.util.ArrayList;
import java.util.Collections;

public class UniqueRandomNumbers {

public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    for (int i=1; i<1000001; i++) {
        list.add(new Integer(i)); // adding all the numbers between 1-1m to a list.
    }
    Collections.shuffle(list); // using the built in shuffle function to make the unique order
    for (int i=0; i<500000; i++) {
        System.out.println(list.get(i)); // printing the first 500k. Replace this with whatever you want to do with those numbers. 
        //Notice - since it might take a while, it might be worth it to let the user know of the progress.
    }
}
}
import java.util.ArrayList;
导入java.util.Collections;
公共类UniquerandomNumber{
公共静态void main(字符串[]args){
ArrayList=新建ArrayList();

对于(int i=1;i如果内存非常宝贵,请使用位图来记住百万中选择了哪一个,然后重复选择一个随机数,并在500000后停止。这基本上是最佳存储,因为lg(1e6选择0.5e6)不比1e6小多少。

检查此项