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

JavaScriptで連続していない最初の数値のインデックスを見つける方法

今回は、配列を受け取り、その中で最初に連続性が崩れている数値のインデックスを返す関数をJavaScriptで作成します。

ここで扱う配列は、すべての数値が公差1の等差数列(1ずつ増加する数列)になっているものとします。しかし、途中にこの規則から外れた数値が存在する場合があり、その違反している数値のインデックスを返す必要があります。もしすべての数値が完璧な順序で並んでいる場合は、-1を返します。

問題のポイント

  • 隣り合う要素同士の差が必ず「1」になるという前提で配列を走査します。
  • 差が1以外になった箇所が、規則に違反する最初の要素です。
  • 最後まで違反が見つからなければ -1 を返します。

実装コード

それでは、この関数のコードを書いてみましょう。

const arr = [1,2,3,4,5,6,8,9,10];
const secondArr = [3,4,5,6,7,8,9,10,11,12,13,14,15];
const findException = (arr) => {
    for(let i = 0; i < arr.length-1; i++){
        if(arr[i+1] - arr[i] !== 1){
            return i+1;
        };
    };
    return -1;
};
console.log(findException(arr));
console.log(findException(secondArr));

コードの解説

この関数では、配列を先頭から順番にループ処理し、現在の要素 arr[i] と次の要素 arr[i+1] の差を計算しています。

  • 差が 1以外 の場合、そこで初めて連続性が崩れているため、次の要素のインデックス i+1 を即座に返します。
  • ループが最後まで完了しても違反箇所が見つからなければ、すべての数値が正しく連続していることになるため -1 を返します。

実行結果

コンソールへの出力は以下のようになります。

6
-1

1つ目の配列 [1,2,3,4,5,6,8,9,10] では、6の後に8が続いているため、7が欠けています。したがって、違反している数値 8 のインデックスである 6 が出力されます。

2つ目の配列は3から15まですべて1ずつ増加しており、規則違反が存在しないため、-1 が返されます。

まとめ

このように、単純な線形探索(時間計算量 O(n))によって、等差数列の中で最初に規則を破る要素のインデックスを効率よく特定できます。データの整合性チェックやバリデーション処理などにも応用できる基本的かつ実用的なパターンです。

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

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

  2. C#で配列の最初の要素のインデックスを取得する方法

    C#で配列の最初の要素のインデックスを取得するには、Array.GetLowerBound(0)メソッドを使用します。このメソッドは、指定した次元における配列の下限(最小インデックス)を返します。 通常のC#配列はインデックス0から始まるため、GetLowerBound(0)は常に「0」を返します。引数の「0」は、対象となる次元(0番目=最初の次元)を指定するものです。 例1:文字列配列の場合 以下のコードでは、文字列配列に対して各種プロパティの状態を確認しつつ、最初の要素のインデックスを取得しています。 using System; public class Demo { public