PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPで配列内の欠落している数値を見つけるプログラムの作成方法

与えられた配列の中から「欠けている数値」を検出したいケースは、実際の開発でもよくあります。ここでは、PHPを使って連続する整数の中で配列に存在しない数値を見つけ出すサンプルコードを紹介します。

サンプルコード

<?php
function missing_nums($my_arr, $arr_len, $val)
{
    sort($my_arr);
    $i = 0;
    // 0以下の数値は判定対象外のためスキップする
    while ($i < $arr_len && $my_arr[$i] <= 0)
        $i++;
    $count = 0;
    $current_num = 1;
    // 配列を走査しながら、存在しない数値を出力する
    while ($count < $val && $i < $arr_len)
    {
        if ($my_arr[$i] != $current_num)
        {
            echo $current_num . " ";
            $count++;
        }
        else
            $i++;
        $current_num++;
    }
    // 配列の範囲を超えた分の数値も出力する
    while ($count < $val)
    {
        echo $current_num . " ";
        $current_num++;
        $count++;
    }
}
$my_arr = array(6, 7, 9);
$arr_len = sizeof($my_arr);
$val = 5;
print_r("配列に存在しない数値: ");
missing_nums($my_arr, $arr_len, $val);
?>

出力結果

配列に存在しない数値: 1 2 3 4 5

コードの解説

まず、missing_nums という名前の関数を定義しています。この関数は、連続する数値の配列の中から欠けている数値をチェックする役割を担います。

処理の流れ

  1. sort() 関数で配列を昇順に並べ替えます。
  2. 0 以下の数値は判定の対象外となるため、先頭から順にスキップします。
  3. 確認中の数値 $current_num を 1 からスタートし、配列の各要素と照合していきます。
  4. 配列の要素と一致しなかった場合、その数値は「欠落している」と判断され、出力されてカウントが 1 増えます。
  5. 一致した場合は、配列の走査位置を次の要素へ進めます。
  6. 配列の末尾まで走査しても必要な個数に満たない場合は、その後の数値も順番に出力していきます。

関数の外側では、対象となる配列(6・7・9)を定義し、sizeof() 関数で要素数を取得して変数 $arr_len に代入しています。さらに、見つけたい欠落数値の個数として 5 を指定しています。これらの値を引数として関数を呼び出すと、計算結果が画面に出力されます。

このアルゴリズムは配列を一度だけ走査すればよいため、計算量はほぼ O(n) と非常に効率的です。ソート済みの配列に対して数値を順に照合していくシンプルな手法なので、PHPの初心者の方でも理解しやすいのが大きな特徴です。

  1. Javaでソートされていない整数配列から欠落している正の数を見つける方法

    はじめに ソートされていない整数の配列が与えられていると仮定しましょう。この課題は、範囲 [0〜n] の中で、与えられた配列に存在しない正の欠損数を見つけることです。以下に具体例を示します。 入力例1 N = 9 arr = [0,2,5,9,1,7,4,3,6] 出力: 8 説明: このソートされていない配列において、「8」だけが欠落している正の整数であるため、出力は「8」になります。 入力例2 N = 1 arr = [0] 出力: 1 説明: この配列では、「1」だけが欠落している正の整数であるため、出力は「1」になります。 この問題へのアプローチ この問題にはいくつかの解法がありますが

  2. 【Python】配列の中で欠けている最小の正整数を見つける方法

    数値のリスト nums が与えられたとき、その中に存在しない「最初の正の整数」、すなわち欠けている最小の正整数を見つける問題を考えます。配列には重複した値や負の数が含まれる可能性がある点に注意が必要です。 例えば、入力が nums = [0, 3, 1] の場合、出力は 2 となります。0・1・3 は存在しますが、2 だけが欠けているためです。 解決のアプローチ この問題は、集合(set)を使うことでシンプルかつ効率的に解くことができます。手順は以下の通りです。 nums から正の数のみを取り出して集合を作成する(負の数と重複は自動的に除外される) 集合が空の場合は、正の数が一つも存