JavaScriptで配列内の最初の重複要素を検出する方法
配列内で少なくとも2回出現する最初の要素のインデックスを返す関数を作成します。すべての要素が一度しか出現しない場合は -1 を返します。また、追加のメモリを使用しない定数空間(O(1))で実装する必要があります。
それでは、この問題の解決策を見ていきましょう。
アプローチ
ここでは、for ループで配列を先頭から順に走査し、Array.prototype.lastIndexOf() メソッドを使って各要素に重複があるかどうかを判定します。
lastIndexOf() は、指定した要素が配列内で最後に出現する位置を返します。現在のインデックス i と lastIndexOf() の結果が異なる場合、その要素は後ろにもう一度出現している、つまり重複していることがわかります。
コード例
実装コードは以下の通りです。
const arr1 = [0, 1, 1, 2, 3, 4, 4, 5];
const firstRedundant = arr => {
for (let i = 0; i < arr.length; i++) {
if (arr.lastIndexOf(arr[i]) !== i) {
return i;
}
}
return -1;
};
console.log(firstRedundant(arr1)); // 1実行結果
コンソールには次のように出力されます。
1
処理の流れ
上記の例では、インデックス 0 の要素 0 は lastIndexOf(0) の結果が 0 となり一致するため、重複ではありません。次のインデックス 1 の要素 1 は、lastIndexOf(1) の結果が 2 となり現在のインデックスと一致しないため、重複していると判定され、1 が返されます。
注意点
この方法は追加のメモリを必要としないため空間計算量は O(1) ですが、各要素ごとに配列全体を走査するため、時間計算量は O(n²) になります。配列のサイズが非常に大きい場合はパフォーマンスへの影響に注意が必要です。
-
【JavaScript入門】配列内で最初の非連続な数値を見つける方法
はじめに本記事では、JavaScriptを使って「数値の配列の中から、直前の要素と連続していない最初の数値」を見つける方法を解説します。アルゴリズムの練習やコーディング面接の対策としても役立つ基本的な問題です。 問題の定義数値の配列を受け取るJavaScript関数を作成する必要があります。この関数は、直前の要素に対して +1 となっていない(連続していない)最初の要素を返さなければなりません。 言い換えると、隣り合う要素同士の差が1以外になる箇所が現れたとき、その箇所の後ろ側の要素を返すという処理です。なお、そのような要素が必ず配列内に1つ以上存在するものとします。 サンプルコード以下は、実
-
C#で配列の最初の要素のインデックスを取得する方法
C#で配列の最初の要素のインデックスを取得するには、Array.GetLowerBound(0)メソッドを使用します。このメソッドは、指定した次元における配列の下限(最小インデックス)を返します。 通常のC#配列はインデックス0から始まるため、GetLowerBound(0)は常に「0」を返します。引数の「0」は、対象となる次元(0番目=最初の次元)を指定するものです。 例1:文字列配列の場合 以下のコードでは、文字列配列に対して各種プロパティの状態を確認しつつ、最初の要素のインデックスを取得しています。 using System; public class Demo { public