PHP 開発では、一連の数値の中から不連続な数値を見つけることが必要になることがよくあります。この要件を迅速かつ効率的に実現するにはどうすればよいでしょうか?この記事ではそれについて詳しく説明します。
1. 問題の背景
一連の数字の中から不連続な数字、つまり、ある数字の次の数字から一定の間隔がある数字を見つけます。たとえば、シーケンス [1、2、6、7、9、12、15、17] が与えられ、間隔が 4 であると仮定して、不連続な数値を見つけるように求められた場合、戻り値は [2、9、17] になります。
2. 問題分析
この要件を実現するには、数値シーケンス全体を走査し、数値ごとに次の処理を実行する必要があります。数値と前の数値 数値の差が指定された間隔に等しいかどうか。等しい場合は、その数値が不連続な数値の 1 つであることを示します。等しくない場合は、その数値が現在の数値として記録されます。
$result 配列を定義して、不連続な数値を格納します。
数値と前の数値の差が指定された間隔に等しい場合、数値は $result 配列に追加されます;
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);
上記の実装はすでに要件を満たしていますが、次の点では効率的ではない可能性があります。実際の使用です。次の最適化を検討してください。
数値が不連続な数値として記録されている場合、後続の数値は連続することができないため、次の処理の前に $previous をこの不連続な数値に設定できます。 差分が大きいデジタルシーケンスの検索では、トラバーサル処理中に最後の不連続な番号の位置を記録し、次の検索をその位置から直接処理できるため、不要なトラバーサルを削減できます。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);
この記事では、PHP で不連続な数値を見つける方法を簡単に紹介し、基本的な実装を示します。実際の使用では、より良いパフォーマンスと効果を達成するために、さまざまなニーズに応じて適切な実装方法と最適化手段を選択する必要があります。
以上がPHPで一連の数字の中から連続しない数字を見つける方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。