JavaScriptの配列から2番目に大きい要素を効率的に見つける方法
JavaScriptで配列の中から2番目に大きい要素を取得したい場面はよくあります。本記事では、ループを1回だけ使って効率的に求める方法を、実際のコードと実行結果付きで解説します。
サンプル配列の準備
まず、例として次のような数値の配列を用意します。
var numbers = [10, 50, 80, 60, 89];
2番目に大きい要素を見つけるコード
最大値と2番目の値を同時に追跡しながら、配列を一度だけ走査するのがポイントです。
var numbers = [10, 50, 80, 60, 89];
// 安全な整数の最小値で初期化
var firstLargerNumber = Number.MIN_SAFE_INTEGER;
var secondlargerNumber = firstLargerNumber;
for (var tempNumber of numbers) {
// 現在の値が最大値より大きい場合
if (tempNumber > firstLargerNumber) {
secondlargerNumber = firstLargerNumber; // 旧最大値を2位へ繰り下げ
firstLargerNumber = tempNumber; // 最大値を更新
}
// 最大値より小さいが、2位より大きい場合
else if (tempNumber > secondlargerNumber) {
secondlargerNumber = tempNumber;
}
}
console.log("The second largest number=" + secondlargerNumber);
ロジックのポイント
- firstLargerNumber:それまでに見つかった最大値を保持します。
- secondlargerNumber:2番目に大きい値を保持します。
- 新しい値が最大値を上回った場合は、旧最大値を2位に繰り下げてから最大値を更新します。
- 最大値未満でも2位より大きい値であれば、2位の値だけを更新します。
プログラムの実行方法
Node.jsで上記のプログラムを実行するには、次のコマンドを使用します。
node fileName.js
ここでは、ファイル名を demo138.js として保存しています。
出力結果
実行すると、コンソールに次のように表示されます。
PS C:\Users\Amit\JavaScript-code> node demo138.js The second largest number=80
この結果から、配列 [10, 50, 80, 60, 89] の中で2番目に大きい値は 80 であることが確認できます。この手法の計算量はO(n)であり、配列をソートしてから取り出す方法(O(n log n))よりも効率的です。大きなデータセットを扱う場合にも有効なアプローチと言えるでしょう。
-
JavaScript配列で要素を検索する方法を徹底解説!find()メソッドの使い方
JavaScriptで配列の中から特定の要素を検索したい場面は非常に多くあります。本記事では、最もよく使われるfind()メソッドを中心に、実際に動作するサンプルコードとともに分かりやすく解説します。 find()メソッドとは find()メソッドは、配列の各要素に対して指定したテスト関数(コールバック関数)を実行し、条件を満たした最初の要素の値を返します。条件に一致する要素が存在しない場合は undefined を返します。 基本構文 arr.find(callback(element[, index[, array]])[, thisArg]) callback: 各要素をテストする関数
-
Pythonで配列内の最大の要素を見つける方法を解説
この記事では、「配列の中から最大の要素を求める」という問題の解決方法について詳しく解説します。 問題の概要 問題文:与えられた配列に対して、その中で最も大きい要素を計算して求める必要があります。 ここではブルートフォース(総当たり)アプローチを使用します。これは、配列全体を先頭から順番に走査しながら各要素を比較し、その時点での最大値を更新していくというシンプルかつ確実な手法です。 実装例 以下に具体的なコードを示します。 # 最大値を求める関数 def largest(arr, n): # 最大要素の初期値として最初の要素を設定 max = arr[0] # 配列全体を