我如何使用 PHP 来解决这个代码测试?

我第一次做代码测试,30分钟没解决这个问题。您能给我解决此代码测试的答案之一吗?

写一个函数:

function solution($A);

给定一个包含 N 个整数的数组 A,返回 A 中未出现的最小正整数(大于 0)。

例如

  • 给定A = [1, 3, 6, 4, 1, 2],该函数应该返回5

  • 鉴于此A = [1, 2, 3],该函数应该返回4

  • 鉴于此A = [−1, −3],该函数应该返回1

为以下假设编写一个有效的算法:

N 是范围内的整数,[1..100,000];数组 A 的每个元素都是范围内的整数[−1,000,000..1,000,000]


不负相思意
浏览 61回答 1
1回答

慕后森

我确信有一种更有效的方法可以完成它,但这里有一些可以帮助您继续下去的方法。它仍然会循环最多 100,000 次,这已经是相当多了。function solution($array) {    $i = 1;    while (in_array($i, $array)) $i++;    return $i;}编辑:这是一个更优化的解决方案,不使用in_array:function solution($array) {        // sort from smallest to largest    sort($array);        // try to find a positive break in the sequence    $last = 0;    if (end($array) > 0) {        foreach ($array as $current) {            if ($current == $last) continue; // duplicate            if ($current != $last + 1 && $current > 0) break;            $last = $current;        }    }        return $last + 1;}
打开App,查看更多内容
随时随地看视频慕课网APP