【问题标题】:Program to find X-numbers in an array在数组中查找 X 数的程序
【发布时间】:2016-09-11 05:49:30
【问题描述】:

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

【问题讨论】:

  • 请解释你的逻辑。 array_splice 有什么用?
  • array_splice 是 php 中的一个内置函数,该函数从输入数组中删除由 offset 和 length 指定的元素,并用替换数组的元素(如果提供)替换它们。它返回一个包含提取元素的数组。
  • 例如 array_splice( array(1,2,3), 0, 1 ) 将返回 array( 2,3 ) ,它将从数组中删除第 0 个索引为 1 并返回 array( 2 ,3)

标签: php arrays optimization


【解决方案1】:

这样可能会更快:

$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);

主要区别,可望提高性能:

  • 数组在开始工作之前只排序一次(这也可以改进您自己的方法,而无需更改任何其他内容)
  • 一旦达到当前调查的数字,搜索循环就会停止
  • 使用的变量更少

【讨论】:

    猜你喜欢
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多