我第一次做代码测试,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;
}
- 1 回答
- 0 关注
- 60 浏览
添加回答
举报
0/150
提交
取消