共被编辑 2 次

版本 更新时间 贡献者 编辑原因 操作
#r2 2016-03-18 命中水ヽ4785 编辑更新 查看

10万个数字无序排列,要求不重复!高手进!!!

(PS:可能是我描述的不太清楚,其实意思就是这样的。依次生成10W个随机数填充到数组,随机数1-10W之间不能重复。嗯,对,本意就是这样。)

今天面试,技术总监给我出了个思考题,求随机10W个数字无序排列,如何才能高效的执行,内存没有要求,最好的硬件配置,伪代码如下:

static $arr = array();
for($i = 0; $i < 100000; $i++)
{
    $rand = rand(1,100000);
    $y = 0;
    while($rand == $arr[$y])
    {
        $rand = rand(1,100000);
        $y++;
    }
    $arr[$i] = $rand;
}

这样做的坏处就是 刚开始取得第一个数的时候进入while循环的概率是1/100000,那么当取到了第99999个数的时候,进入while循环的几率就是99.9999%,那么这时候就会出现无限循环状态,那么如何规避这个问题呢?

#r1 2016-03-17 命中水ヽ4785 创建问题 查看

10万个数字无序排列,要求不重复!高手进!!!

今天面试,技术总监给我出了个思考题,求随机10W个数字无序排列,如何才能高效的执行,内存没有要求,最好的硬件配置,伪代码如下:

static $arr = array();
for($i = 0; $i < 100000; $i++)
{
    $rand = rand(1,100000);
    $y = 0;
    while($rand == $arr[$y])
    {
        $rand = rand(1,100000);
        $y++;
    }
    $arr[$i] = $rand;
}

这样做的坏处就是 刚开始取得第一个数的时候进入while循环的概率是1/100000,那么当取到了第99999个数的时候,进入while循环的几率就是99.9999%,那么这时候就会出现无限循环状态,那么如何规避这个问题呢?