Maison >développement back-end >Problème PHP >Comment trouver des nombres non consécutifs dans une séquence de nombres en php

Comment trouver des nombres non consécutifs dans une séquence de nombres en php

PHPz
PHPzoriginal
2023-04-05 10:31:22763parcourir

En développement PHP, il est souvent nécessaire de trouver des nombres discontinus dans une séquence de nombres. Comment répondre à cette exigence de manière rapide et efficace ? Cet article vous l’expliquera en détail.

1. Contexte du problème

Trouver des nombres discontinus dans une séquence de nombres, c'est-à-dire trouver les nombres qui ont un certain intervalle à partir du nombre suivant après un certain nombre. Par exemple, étant donné une séquence [1, 2, 6, 7, 9, 12, 15, 17] et demandé de trouver des nombres discontinus, en supposant que l'intervalle est 4, la valeur de retour est [2, 9, 17].

2. Analyse du problème

Pour répondre à cette exigence, nous devons parcourir toute la séquence de nombres et effectuer le traitement suivant pour chaque numéro :

  1. Vérifiez si la différence entre le numéro actuel et le numéro précédent est égale au numéro spécifié. intervalle. S'ils sont égaux, cela indique que ce nombre est l'un des nombres discontinus. S'ils ne sont pas égaux, le nombre est enregistré comme le nombre actuel.
  2. Ajoutez les nombres enregistrés à un tableau de résultats et renvoyez enfin le tableau de résultats.

Dans une implémentation spécifique, les méthodes suivantes peuvent être utilisées :

  1. Définissez un tableau $result pour stocker des nombres discontinus.
  2. Définissez une variable $previous pour enregistrer le numéro précédent.
  3. Parcourez la séquence de nombres et traitez chaque nombre.

    1. Si la différence entre ce nombre et le nombre précédent est égale à l'intervalle spécifié, ajoutez le nombre au tableau $result
    2. Sinon, enregistrez le nombre comme $previous ;
  4. Renvoie le tableau $result.

Le code d'implémentation spécifique est le suivant :

function findDiscontinuousNumbers($nums, $interval) {
    $result = [];
    $previous = null;
    foreach ($nums as $num) {
        if (!is_null($previous) && $num - $previous == $interval) {
            $result[] = $num;
        }
        $previous = $num;
    }
    return $result;
}

$nums = [1, 2, 6, 7, 9, 12, 15, 17];
$interval = 4;
$result = findDiscontinuousNumbers($nums, $interval);
print_r($result);

3. Optimisation du code

L'implémentation ci-dessus peut déjà répondre aux exigences, mais elle peut ne pas être efficace dans une utilisation réelle. Considérez l'optimisation suivante :

  1. Lorsqu'un nombre a été enregistré comme nombre discontinu, les nombres suivants ne peuvent pas être continus avec lui, donc $previous peut être défini sur le nombre discontinu avant le prochain traitement.
  2. Pour la recherche de séquences numériques avec de grandes différences, pendant le processus de parcours, la position du dernier nombre discontinu peut être enregistrée et la recherche suivante peut être traitée directement à partir de cette position, ce qui peut réduire les parcours inutiles.

Le code optimisé est le suivant :

function findDiscontinuousNumbers($nums, $interval) {
    $result = [];
    $previous = null;
    $last_discontinuous_index = null; // 上一次不连续数字的索引位置
    for ($i = 0; $i < count($nums); ) {
        if (!is_null($previous)) {
            if ($nums[$i] - $previous == $interval) {
                $result[] = $nums[$i];
            } else {
                $previous = $nums[$i];
                $last_discontinuous_index = $i;
            }
        } else {
            $previous = $nums[$i];
            $last_discontinuous_index = $i;
        }
        $i += ($i == $last_discontinuous_index + 1) ? 1 : $interval;
    }
    return $result;
}

$nums = [1, 2, 6, 7, 9, 12, 15, 17];
$interval = 4;
$result = findDiscontinuousNumbers($nums, $interval);
print_r($result);

IV Résumé

Cet article présente brièvement la méthode de recherche de nombres discontinus en PHP et donne l'implémentation de base. En utilisation réelle, des méthodes de mise en œuvre et des mesures d'optimisation appropriées doivent être sélectionnées en fonction des différents besoins pour obtenir de meilleures performances et de meilleurs effets.

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