$arr = [2,3,4,5,8,10,11,12,13,16,19]?;
Convertir en cha?ne
2-5, 8, 10-13, 16, 19
Mon idée personnelle est de sélectionner 8 16 19 qui ne dépendent pas des deux c?tés, puis de sélectionner une valeur maximale et minimale parmi 2 3 4 5.
Notez la valeur du point de départ et numérisez en arrière. Si elle est continue, continuez en arrière. Sinon, notez la valeur du point final et obtenez un début ou une fin. continuez...
$arr=array(2,3,4,5,8,10,11,12,13,16,19);
//最大值
$max=max($arr);
//求和
$sun=array_sum($arr);
//排序
asort($arr);
//a1為標準數(shù)組,用來判斷值是否存在
//a2用來存放已經(jīng)被使用過的數(shù)
//a3為最后的結(jié)果數(shù)組
foreach ($arr as $key => $value) {
$a1[$value]=$value;
}
foreach ($arr as $key => $value) {
if(!isset($a2[$value])){
$start=$value;
$end=$value;
$a2[$value]=$value;
for($i=0;$i<$sun;$i++){
$end = $end+1;
if(isset($a1["$end"])){
$a2[$end]=$end;
}else{
$end =$end-1;
if($start==$end){
$a3 []= $start;
}else{
$a3 []= $start."-".$end;
}
//斷開了,跳出循環(huán)
break;
}
}
}
}
echo '<pre>';
var_dump($a3);
die;
Divisez le tableau en 5 morceaux, puis traitez les sous-tableaux.