程序在数组

时间:2016-09-10 12:01:32

标签: php arrays optimization

N 个数组中,如果数字可以被数组中至少一个其他数字整除,则数字是一个X数。编程以查找给定数组中存在多少这样的数字

示例1:在数组[1,2,3]中,x数的数量是2(2和3,因为它们可以被数字1整除)

示例2:在数组[2,3,5,8]中,x数的数量为1(8可被2整除)

示例3:在数组[2,3,6,12]中,x数的数量为2(6可被2和3整除,12可被2和3和6整除)

我正在使用下面的代码,但我希望以一种方式优化它,如果数组大小增加,性能不应该妨碍:

$arr = array(2,3,6,12);

$count = 0;

function check_special_num($tnum, $tarr){
    sort($tarr);
    for($i=0;$i<sizeof($tarr);$i++){
        if( $tnum % $tarr[$i] == 0 ){
            return true;
        }
    }
    return false;
}

for($i=0;$i<sizeof($arr);$i++){
    $temp = $arr;
    $num = $arr[$i];
    array_splice($temp, $i, 1);

    if( check_special_num( $num, $temp ) ){
        $count += 1;
    }
}

echo $count;

编码语言是PHP

1 个答案:

答案 0 :(得分:0)

这种方式可能更快:

$arr = array(2,3,6,12);
function x_numbers_count($arr) {
  $count = 0;
  sort($arr);
  foreach ($arr as $i => $number) {
    for ($j = 0; $j < $i; $j++) {
      if ($number % $arr[$j] == 0) {
        $count++;
        break;
      }
    }
  }
  return $count;
}
echo x_numbers_count($arr);

主要差异,可以预期提高绩效:

  • 在开始工作之前,数组只排序一次(这也可以改进你自己的方法,而不会改变任何其他方法)
  • 搜索循环一旦到达当前调查的号码就会停止
  • 使用较少的变量
相关问题