はじめに
この実験では、基本的なスキルを築くのに役立つ一連の演習を完了することで、JavaScript プログラミングを探求します。基本構文やデータ型から、非同期プログラミングや関数型プログラミングのような高度な概念まで、この実験では実践的な経験を提供し、熟練した JavaScript 開発者になるのに役立ちます。プログラミング初心者であろうと、スキルを拡充しようとしている人であろうと、この実験は成功するために必要なツールを提供します。
最大部分配列アルゴリズム
コーディングを練習するには、ターミナル/SSH を開いて node と入力します。このアルゴリズムは、数値の配列内で最大の合計を持つ連続する部分配列を見つけます。このアルゴリズムを実装するには、次の手順に従います。
- 貪欲法を使用して、現在の
sumと現在の最大値maxSumを追跡します。すべての値が負の場合、最も高い負の値が返されるように、maxSumを-Infinityに設定します。 - 最大開始インデックス
sMax、最大終了インデックスeMax、および現在の開始インデックスsを追跡するための変数を定義します。 Array.prototype.forEach()を使用して値を反復処理し、現在の値をsumに追加します。- 現在の
sumがmaxSumより大きい場合、インデックス値とmaxSumを更新します。 sumが 0 未満の場合、それを 0 にリセットし、sの値を次のインデックスに更新します。Array.prototype.slice()を使用して、インデックス変数によって示される部分配列を返します。
ここに、このアルゴリズムの JavaScript コードがあります。
const maxSubarray = (...arr) => {
let maxSum = -Infinity,
sum = 0;
let sMax = 0,
eMax = arr.length - 1,
s = 0;
arr.forEach((n, i) => {
sum += n;
if (maxSum < sum) {
maxSum = sum;
sMax = s;
eMax = i;
}
if (sum < 0) {
sum = 0;
s = i + 1;
}
});
return arr.slice(sMax, eMax + 1);
};
ここに、この関数の使用方法の例があります。
maxSubarray(-2, 1, -3, 4, -1, 2, 1, -5, 4); // [4, -1, 2, 1]
まとめ
おめでとうございます!あなたは最大部分配列の実験を完了しました。あなたのスキルを向上させるために、LabEx でさらに多くの実験を練習することができます。