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

JavaScriptのwhileループで連続する数値の最長部分配列を見つける方法

はじめに

本記事では、正の整数の配列の中から「連続した数値が続く最長の部分配列」の長さを求める関数を、while文を使って実装する方法を解説します。

例えば、入力配列が以下の場合を考えてみましょう。

const input = [6, 7, 8, 6, 12, 1, 2, 3, 4]; // 最長の連続部分配列は [1,2,3,4]

この場合、出力は次のようになります。

4

また、別の入力配列の例です。

const input = [5, 6, 1, 8, 9, 7]; // 最長の連続部分配列は [8,9]

この場合の出力は次のとおりです。

2

それでは、この関数の実装コードを見ていきましょう。

実装コード

const arr = [6, 7, 8, 6, 12, 1, 2, 3, 4];
const arr1 = [5, 6, 1, 8, 9, 7];
const findLongestSub = arr => {
   let count = 1, len = 0, max = 1;
   while(len < arr.length){
      if(arr[len] === arr[len - 1] + 1){
         count++;
         if(max < count){
            max = count;
         }
         }else{
            count = 1;
      };
      len++;
   };
   return max;
};
console.log(findLongestSub(arr));
console.log(findLongestSub(arr1));

コードの解説

この実装のポイントは以下の3つの変数にあります。

  • count:現在走査している位置での連続する数値の長さを保持します。
  • max:これまでに見つかった最長の連続長を記録します。
  • len:配列の走査位置(インデックス)を表します。

whileループの中では、現在の要素 arr[len] が直前の要素 arr[len - 1] の「+1」と一致するかどうかを判定します。一致する場合は count をインクリメントし、必要に応じて max を更新します。連続が途切れた場合は count を1にリセットして、新たな連続のカウントを開始します。

この処理を配列の末尾まで繰り返し、最終的に max を返すことで、最長の連続部分配列の長さが求まります。

実行結果

コンソールには次のように出力されます。

4
2

まとめ

while文を使えば、for文と同様に配列を走査しながら連続する数値の最長部分配列の長さを効率的に求められます。計算量は配列の長さに比例するO(n)であり、シンプルで読みやすい実装となっています。ぜひ実際のコードで試してみてください。

  1. JavaScriptのdo…whileループとは?特徴と使い方をわかりやすく解説

    do…whileループとはJavaScriptのdo...whileループは、whileループとよく似ていますが、決定的な違いがひとつあります。それは、条件判定がループ処理の後(末尾)で行われるという点です。この仕組みにより、条件式が最初からfalseであったとしても、ループ内の処理は必ず最低1回は実行されます。「少なくとも1回は処理を行いたい」というケースに適した制御構文です。whileとの違いを整理すると通常のwhileループは「まず条件を評価し、trueなら処理を実行する」という順序です。そのため条件がfalseの場合、処理は一度も実行されません。一方、do...whileループは「まず

  2. JavaScriptのwhileループとは?基本構文と動作例をわかりやすく解説

    whileループは、指定した条件式がtrue(真)である限り、特定の文やコードブロックを繰り返し実行するための制御構造です。条件式がfalse(偽)に評価された瞬間に、ループは終了し、その後の処理へと進みます。 whileループの基本構文 while (条件式) { // 繰り返し実行したい処理 } whileループは、まず最初に条件式を評価します。条件がtrueであればブロック内の処理を実行し、再び条件式に戻って評価を行います。この流れを図にすると以下のようになります。 サンプルコード 実際に簡単な例を見てみましょう。変数 i をカウンターとして使い、5回「Hello」を出力するプ