ホームページ  >  記事  >  バックエンド開発  >  PHPで配列の連続番号を見つける方法

PHPで配列の連続番号を見つける方法

PHPz
PHPzオリジナル
2023-04-18 14:06:30543ブラウズ

PHP 開発において、配列は最も重要なデータ構造の 1 つです。その中でも、配列の連続番号を見つけることは非常に一般的な要件です。この記事では、これを行うさまざまな方法について説明します。

  1. ループ トラバーサル メソッド

ループ トラバーサル メソッドは、配列内の連続した番号を見つけるための一般的な方法です。基本的な考え方は、配列の最初の要素が開始点であると仮定し、この開始点から要素を逆方向にたどり、次の要素と現在の要素の差が 1 であるかどうかを毎回計算することです。 「はい」の場合、配列内に連続した番号があることを意味します。そうでない場合は、開始点をリセットしてトラバースを続けます。

サンプル コードは次のとおりです。

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. ソート メソッド

ソート メソッドは、配列内の連続した数値を取得するためのもう 1 つの一般的な方法です。基本的な考え方は、まず元の配列を並べ替え、次に配列要素を順番に走査し、各要素と前の要素の差が 1 であるかどうかを計算します。 「はい」の場合、配列内に連続した番号があることを意味します。そうでない場合は、開始点をリセットしてトラバースを続けます。

サンプルコードは以下のとおりです。

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. 再帰的メソッド

再帰的メソッドも配列の連続番号を取得するメソッドです。各要素を再帰的に走査し、各要素と前の要素の差が 1 であるかどうかを判断します。差が 1 の場合は、次の要素への再帰を続けます。差が 1 でない場合は、連続数値が終了し、前のレベルの再帰が返されることを意味します。

サンプルコードは次のとおりです。

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]]

要約:

上記の 3 つの方法により、配列の連続番号を簡単に見つけることができます。このうち、ループトラバーサル方式とソート方式の計算量は $O(nlogn)$、再帰方式の計算量は $O(n)$ です。したがって、データ量が多い場合には、再帰的手法の使用を優先することができます。

以上がPHPで配列の連続番号を見つける方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。