function firstMissingPositiveV2($nums) {
for ($i=0, $len=count($nums); $i<$len; $i++) {
// 还原数组法,利用原数组来存储各正数的存在信息
while ($nums[$i] > 0 && $nums[$i] <= $len && $nums[$i] !== $nums[$nums[$i]-1]) {
// 我们只关心范围在[1,N]里的正数,如果当前位置为i的数k为[1,N]内的数,则将基与k-1位置上的数交换,
// 位置i上新的数如果满足在[1,N],则继续交换,这儿要检验i与 k-1上的数是否相等,不然会出现死循环。
$_temp = $nums[$nums[$i]-1] ;
$nums[$nums[$i]-1] = $nums[$i];
$nums[$i] = $_temp;
}
}
foreach ($nums as $i => $num) {
if ($num !== $i+1) {
return $i+1;
}
}
return count($nums) + 1;
}
缺失的第一个正数【php版】
最新推荐文章于 2024-06-10 23:22:52 发布