JavaScriptで配列内にターゲット平均と一致する値のペアが存在するか判定する方法
本記事では、ソート済みの整数配列とターゲットとなる平均値をそれぞれ第1引数・第2引数として受け取るJavaScript関数の作成方法を解説します。
この関数の役割は、配列内に「2つの値からなるペア」が存在し、そのペアの平均値がターゲット平均と一致するかどうかを判定することです。
効率的な解き方:両端ポインタ(ツーポインタ)法
この問題は、追加の空間計算量 O(1)、時間計算量 O(n) で解決できます。
ポイントは、配列がすでにソートされているという点です。ソート済みであれば、次の2つのインデックスを使うアプローチが有効です。
- y: 配列の先頭から末尾へ向かって進むインデックス
- x: 配列の末尾から先頭へ向かって進むインデックス
この手法は「両端ポインタ法」と呼ばれ、ペアの合計がターゲットの2倍(=目標合計)より大きければ右側のポインタを左に移動し、小さければ左側のポインタを右に進めることで、線形時間での探索を実現します。
コード例
実際の実装コードは以下の通りです。
const arr = [1, 2, 4, 6, 7, 9, 11];
const averagePair = (arr = [], target = 1) => {
let x = arr.length - 1;
for (let y = 0; y < x; y++) {
while (y < x && arr[x] + arr[y] > 2 * target) {
x--;
};
if (x !== y && arr[x] + arr[y] === 2 * target) {
return true;
};
};
return false;
};
console.log(averagePair(arr, 6.5));
実行結果
コンソールへの出力は次のようになります。
true
この例では、配列 [1, 2, 4, 6, 7, 9, 11] の中にある 4 と 9 のペアの平均が (4 + 9) / 2 = 6.5 となり、ターゲット平均 6.5 と一致するため、関数は true を返します。該当するペアが存在しない場合は false が返されます。
-
JavaScriptで配列の平均値を計算する方法
JavaScriptで配列の平均値を求めるには、配列内のすべての要素を合計し、その合計を配列の長さ(要素数)で割ります。要素の合計を求めるには、forEach()メソッドやreduce()メソッドを使うと簡単に実装できます。コード例<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initia
-
JavaScriptのnew.targetメタプロパティとは?使い方をわかりやすく解説
JavaScriptのnew.targetとはnew.targetは、関数やコンストラクタが実行時にnewキーワードを使って呼び出されたかどうかを判定できるメタプロパティです。通常、関数をnewをつけずに呼び出すと、コンストラクタとして意図された関数でも単なる通常の関数として実行されてしまい、グローバルオブジェクトにプロパティが設定されるなどの予期しない動作を引き起こす可能性があります。new.targetを利用することで、このような誤用を検出し、エラーとして通知することができます。new演算子とともに呼び出された場合、new.targetは呼び出されたコンストラクタ自身への参照を返します。一