【问题标题】:Generating 3 unique random numbers in the range from 1 to 100在 1 到 100 的范围内生成 3 个唯一的随机数
【发布时间】:2019-07-09 08:03:19
【问题描述】:

我编写了一个代码,该代码从该范围内生成 3 个随机唯一数字。它似乎工作,但我想知道它是否正常工作,我的代码是否适合更大的范围。例如,如果我想从 1 到 10^6 范围内生成 300 个而不是 3 个随机唯一数字。我的代码在内存使用和执行时间方面的表现如何?

代码正在运行,但我不确定。只是想确定一下,我没有遗漏什么。

<?php
    $array=range(1,100);
    $rand = array_rand($array,3);
    echo "Random number 1: ".$array[$rand[0]]."\n";
    echo "Random number 2: ".$array[$rand[1]]."\n";
    echo "Random number 3: ".$array[$rand[2]]."\n";
?>

因此,我想要性能良好的工作代码。

【问题讨论】:

  • 我认为这个问题更适合codereview.stackexchange.com
  • 我建议尝试一下并查看结果。
  • 绝对不适合 10^6 的范围,因为您必须创建一个巨大的数组,这充其量会浪费内存,或者在最坏的情况下扩展超出其限制
  • @ÐℛẲḰỮℒѦ 引用的问题中的second rated answer 很好地回答了您关于性能的问题(对于更高的范围,它更好)
  • 感谢您的回答! ÐℛẲḰỮℒѦ的回答适合我。

标签: php arrays random


【解决方案1】:

递归函数在这种情况下会有所帮助

$r = f(1,1000000,300);

print_r($r);

function f($min, $max, $total, $current=[]){
  if(count($current) == $total){
    return $current;
  }
  $n = rand($min,$max);
  in_array($n, $current) ? '' : ($current[] = $n);
  return f($min, $max, $total, $current);
}

【讨论】:

  • 谢谢!能否请您分享屏幕截图中的工具?
猜你喜欢
  • 2011-08-02
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 2014-05-15
  • 2011-05-16
  • 1970-01-01
相关资源
最近更新 更多