为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
不负相思意 2023-09-22 16:30:43
我第一次做代码测试,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]。
查看完整描述

1 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

我确信有一种更有效的方法可以完成它,但这里有一些可以帮助您继续下去的方法。它仍然会循环最多 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;

}


查看完整回答
反对 回复 2023-09-22
  • 1 回答
  • 0 关注
  • 60 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信