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

JavaScriptで配列からn番目の欠落数を見つける方法

問題の概要

1ずつ増加する数列があり、その一部の要素が欠落している状況を考えてみましょう。

const arr = [2,3,4,7,11];

このような配列を第1引数として、整数nを第2引数として受け取り、配列の中でn番目に欠けている数値を見つけるJavaScript関数を作成する必要があります。

具体例

上記の配列に対して n = 4 が与えられた場合、期待される出力は 8 です。

なぜなら、この配列に含まれていない数値(欠落数)は次の通りだからです。

1, 5, 6, 8

4番目の欠落数が 8 であるため、関数は 8 を返すことになります。

解決策:コード例

const arr = [2, 3, 4, 7, 11];
const findMissing = (arr = [], n) => {
    let el = 0;
    let diff = 0;
    for(let i=0; i<arr.length; ++i) {
        const difference = arr[i] - el - 1;
        const sum = diff + difference;
        if(sum>=n) {
            break;
        };
        diff = sum;
        el = arr[i];
    }
    return el + n - diff;
};
console.log(findMissing(arr, 4));

コードの仕組み

変数 el は直前に確認した配列の要素を、diff はそれまでに発見された欠落数の累計を表します。ループ内では隣接する要素同士の差分から各区間の欠落数を計算し、その累計が n 以上になった時点で処理を中断します。最後に el + n - diff を返すことで、目的となるn番目の欠落数を効率的に算出しています。

出力結果

このコードを実行すると、コンソールには以下の出力が表示されます。

8
  1. JavaScriptで昇順配列の中から並び順を壊している唯一の要素を見つける方法

    この記事では、昇順(増加順)にソートされた数値の配列の中に、ただひとつだけ並び順を乱している要素がある場合に、その要素を特定して返すJavaScript関数の実装方法を解説します。 問題の定義 扱う配列は基本的に昇順でソートされていますが、その中の要素がひとつだけ順序から外れています。関数の目的は、その「異常な要素」を見つけ出して返すことです。 たとえば、次のような配列を考えます。 const arr = [1, 2, 3, 4, 17, 5, 6, 7, 8]; この配列から「17」を取り除けば残りは完全な昇順になるため、求める答えは「17」です。 解決のアプローチ 昇順の配列では、隣り合う

  2. JavaScriptで配列要素をそのインデックスでべき乗した値に変換する方法

    問題 数値の配列を受け取るJavaScript関数を作成する必要があります。この関数は、入力配列の各要素を、その要素の位置を示す0始まりのインデックスでべき乗し、新しい配列へと変換します。そして最終的に、この新しい配列を返します。 例えば、インデックス0にある要素は0乗(常に1)、インデックス3にある要素は3乗、というように各要素が処理されます。 実装のポイント ループで配列を走査しながら、各要素とそのインデックスを同時に取得する Math.pow() を使って「要素 ^ インデックス」を計算する 計算結果を結果配列の同じ位置に格納する なお、モダンなJavaScriptでは Math