Maison  >  Article  >  développement back-end  >  Comment trouver les nombres consécutifs d'un tableau en php

Comment trouver les nombres consécutifs d'un tableau en php

PHPz
PHPzoriginal
2023-04-18 14:06:30543parcourir

Dans le développement PHP, le tableau est l'une des structures de données très importantes. Parmi eux, trouver les numéros consécutifs d’un tableau est une exigence très courante. Cet article décrira différentes manières de procéder.

  1. Méthode de parcours en boucle

La méthode de parcours en boucle est une méthode courante pour trouver des nombres consécutifs dans un tableau. L'idée de base est la suivante : en supposant que le premier élément du tableau est le point de départ, parcourez les éléments en arrière à partir de ce point de départ et calculez si la différence entre l'élément suivant et l'élément actuel est de 1 à chaque fois. Si oui, cela signifie qu'il y a des nombres consécutifs dans le tableau. Sinon, réinitialisez le point de départ et continuez la traversée.

L'exemple de code est le suivant :

function findConsecutiveNumbers($arr){
    $res = [];
    $n = count($arr);
    for($i=0;$i<$n;$i++){
        $j=$i+1;
        $tmp=[];
        $tmp[] = $arr[$i];
        while($j<$n && $arr[$j]-$arr[$j-1]==1){
            $tmp[] = $arr[$j];
            $j++;
        }
        if(count($tmp)>1){
            $res[] = $tmp;
        }
    }
    return $res;
}

$arr = [1, 2, 3, 5, 6, 7, 9];
$res = findConsecutiveNumbers($arr);
print_r($res); //输出[[1,2,3],[5,6,7]]
  1. Méthode de tri

La méthode de tri est une autre méthode courante pour trouver les nombres consécutifs dans un tableau. L'idée de base est la suivante : triez d'abord le tableau d'origine, puis parcourez les éléments du tableau dans l'ordre et calculez si la différence entre chaque élément et l'élément précédent est de 1. Si oui, cela signifie qu'il y a des nombres consécutifs dans le tableau. Sinon, réinitialisez le point de départ et continuez la traversée.

L'exemple de code est le suivant :

function findConsecutiveNumbers($arr){
    sort($arr);
    $res = [];
    $n = count($arr);
    $tmp = [];
    for($i=0;$i<$n;$i++){
        if(!$i || $arr[$i]-$arr[$i-1]==1){
            $tmp[] = $arr[$i];
        }else{
            if(count($tmp)>1){
                $res[] = $tmp;
            }
            $tmp = [$arr[$i]];
        }
    }
    if(count($tmp)>1){
        $res[] = $tmp;
    }
    return $res;
}

$arr = [1, 2, 3, 5, 6, 7, 9];
$res = findConsecutiveNumbers($arr);
print_r($res); //输出[[1,2,3],[5,6,7]]
  1. Méthode récursive

La méthode récursive est également une méthode pour trouver les nombres consécutifs dans un tableau. Elle parcourt chaque élément de manière récursive et détermine si la différence entre chaque élément et le précédent. l'élément est 1. . Si la différence est de 1, continuez à passer à l'élément suivant. Si la différence n'est pas 1, cela signifie que le nombre continu est terminé et que le niveau de récursion précédent est renvoyé.

L'exemple de code est le suivant :

function findConsecutiveNumbers($arr) {
    $res = array();
    $n = count($arr);
    $i = 1;
    $j = 0;
    while($i < $n) {
        if($arr[$i] - $arr[$i-1] == 1) {
            $i++;
        } else {
            $tmp = array_slice($arr, $j, $i-$j);
            if(count($tmp)>1){
                $res[] = $tmp;
            }
            $j = $i;
            $i++;
        }
    }
    $tmp = array_slice($arr, $j, $i-$j);
    if(count($tmp)>1){
        $res[] = $tmp;
    }
    return $res;
}

$arr = [1, 2, 3, 5, 6, 7, 9];
$res = findConsecutiveNumbers($arr);
print_r($res); //输出[[1,2,3],[5,6,7]]

Résumé :

Avec les trois méthodes ci-dessus, nous pouvons facilement trouver les numéros consécutifs du tableau. Parmi eux, la complexité temporelle de la méthode de parcours de boucle et de la méthode de tri est $O(nlogn)$, et la complexité temporelle de la méthode récursive est $O(n)$. Ainsi, lorsque la quantité de données est importante, on peut privilégier l’utilisation de la méthode récursive.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn