使用php语言解答下面的题目:在一个乱序的自然数数组中,寻找最大的连续自然数子数组,并输出该子数组。例如:数组【12,6,1,4,5,7, 9】的最大连续自然数子数组为【4,5,6,7】。如果该数组中不存在连续的自然数元素(至少两个),则输出“没有找到”。
题目描述:在一个乱序的自然数数组中,寻找最大的连续自然数子数组,并输出该子数组。例如:数组【12,6,1,4,5,7, 9】的最大连续自然数子数组为【4,5,6,7】。如果该数组中不存在连续的自然数元素(至少两个),则输出“没有找到”。
已知:如果存在最大连续子数组,最大连续子数组有且仅有一个
代码实现
<?php
$arr = [12, 7, 2, 4, 3, 5, 10, 13, 11, 14];
sort($arr);// 先对数组进行排序由小到大 $arr=[1,4,5,6,7,9,10,11, 12,13];
$newArr = []; // 存放查找出来的最大连续子数组
for($k=0; $k<count($arr); $k++){ // 外层循环,控制从arr中下标0依次查找
$tmp=[];
while($arr[$k]+1==$arr[$k+1] && $k+1<count($arr)){
// 找出连续自然数数组,存放到tmp中
$tmp[]=$arr[$k];
$k++;
}
//存放上面循环中找出的数组最后一个元素
$tmp[]=$arr[$k];
// print_r($tmp);
echo '<br>';
// 判断,如果新发现了元素更多的子数组,则重新赋值给newArr
if(count($tmp)>count($newArr)){
$newArr=$tmp;
}
}
if(count($newArr)<2){
echo "没有找到";
}else{
echo "newArr=";
print_r($newArr); // 打印找出的最大连续子数组
}
?>
上面的代码仅测试了大部分数据,不保证完全正确,如有错误的地方,欢迎大家留言指证