如何使用PHP解决此代码测试?
我第一次进行了代码测试,但没有在30分钟内解决这个问题。 你能给我一个解决这个代码测试的答案吗 编写一个函数:如何使用PHP解决此代码测试?,php,Php,我第一次进行了代码测试,但没有在30分钟内解决这个问题。 你能给我一个解决这个代码测试的答案吗 编写一个函数: 功能解决方案($A) 给定一个由N个整数组成的数组,返回最小的正整数 整数(大于0),该整数不在A中出现 比如说 给定A=[1,3,6,4,1,2],函数应返回5 给定A=[1,2,3],函数应返回4 给定A=[−1.−3] ,函数应返回1 为以下假设编写有效的算法: N是范围[1..100000]内的整数数组A的每个元素 是范围[−1000000..1000000] 我相信有一个
功能解决方案($A)代码>
给定一个由N个整数组成的数组,返回最小的正整数
整数(大于0),该整数不在A中出现
比如说
- 给定
A=[1,3,6,4,1,2]
,函数应返回5
- 给定
A=[1,2,3]
,函数应返回4
- 给定
A=[−1.−3]
,函数应返回1
为以下假设编写有效的算法:
N是范围[1..100000]内的整数代码>数组A的每个元素
是范围[−1000000..1000000]
我相信有一个更有效的方法来完成这件事,但这里有一些东西可以让你去做。它仍然会循环100000次,这是相当多的
function solution($array) {
$i = 1;
while (in_array($i, $array)) $i++;
return $i;
}
编辑:这里有一个更优化的解决方案,它不在数组中使用:
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;
}
不需要删除负值。在序列中搜索中断时,如果($current!=$last+1)中断,则不要中断($current<0
),即只需更改如果($current!=$last+1&&$current>0)中断,则代码>至
@kmoser如果数组中的所有值都为负值,它将不再返回1True,但看起来您还是更新了代码以减少传递次数。