使用PHP在给定的数字数组中找到缺少的数字

时间:2014-03-31 11:13:04

标签: php

我是php的新手,几天前我面临面试,面试官问了一个类似下面的问题。

给定数组有99个数字,其中包含1到100之间的数字 丢失一位数。描述两种不同的算法,找到丢失的数字。该算法应针对低存储和快速处理进行优化。输出应显示每种算法的执行时间。

我已经搜索了谷歌,并了解了它在采访中常常提出的常见问题。我这样找到了答案。

int sum = 0;
int idx = -1;
for (int i = 0; i < arr.length; i++) {
    if (arr[i] == 0) {
         idx = i; 
    } else {
         sum += arr[i];
    }
}

// the total sum of numbers between 1 and arr.length.
int total = (arr.length + 1) * arr.length / 2;

System.out.println("missing number is: " + (total - sum) + " at index " + idx);

但是代码不在php中,

请你帮我查一下php代码和算法名称。所以我可以在接下来的采访中改进我的答案。

4 个答案:

答案 0 :(得分:9)

在PHP中,您可以轻松使用某些数组函数并实现它。最好的方法是,

$missing = array_diff(range(1,100),$array);

<强> DEMO

答案 1 :(得分:1)

另一种方法是使用array_sum函数,并知道1到100之间的所有数字加在一起等于5050。

$missing = 5050-array_sum($array);

答案 2 :(得分:0)

转换为PHP,它几乎是一样的。 (未经测试)

当然,有更好的方式,例如发布的 Rikesh ,但这是您要求的确切方法:

$sum = 0
$idx = -1
for($i = 0; $i < count($arr); $i++){
   if($arr[$i] == 0){
      $idx = $i;
   }else{
      $sum += $arr[$i];
   }
}

$total = (count($arr) + 1) * (count($arr) / 2);

echo "Missing: " . ($total - $sum) . " at index " . $idx;

答案 3 :(得分:0)

$arr=range(1,99);
$j=1;
for($i=0;$i<100;$i++){
if(!in_array($j,$arr)){
    echo $j.'is missing';
}
$j++;
}