JavaScriptで配列の最小値と最大値を返す関数の作成方法
問題
配列を受け取り、新しい配列を返すJavaScript関数を作成する必要があります。戻り値となる配列の最初の要素には入力配列の最小値を、2番目の要素には最大値を格納します。
コード例
以下のコードでは、Array.prototype.reduce()メソッドを使用して、配列を一度だけ走査しながら最小値と最大値を同時に求めています。
const arr = [56, 34, 23, 687, 2, 56, 567];
const findMinMax = (arr = []) => {
const creds = arr.reduce((acc, val) => {
let [smallest, greatest] = acc;
if(val > greatest){
greatest = val;
};
if(val < smallest){
smallest = val;
};
return [smallest, greatest];
}, [Infinity, -Infinity]);
return creds;
};
console.log(findMinMax(arr));出力結果
[2, 687]
コードの解説
この関数の動作は以下の流れになっています。
reduce()の初期値として[Infinity, -Infinity]を設定することで、配列内のどんな数値と比較しても必ず条件が成立するようにしています。- 各要素(
val)について、現在の最大値より大きければ最大値を更新し、現在の最小値より小さければ最小値を更新します。 - すべての要素の走査が完了した時点で、
[最小値, 最大値]という形式の配列が返されます。
より簡潔な書き方
Math.min() と Math.max() をスプレッド構文と組み合わせれば、同じ処理を1行で記述することもできます。
const arr = [56, 34, 23, 687, 2, 56, 567]; const findMinMax = (arr = []) => [Math.min(...arr), Math.max(...arr)]; console.log(findMinMax(arr)); // [2, 687]
要素数が非常に多い配列の場合、スプレッド構文では引数の上限に達する可能性があるため、そのようなケースではreduce()を使った方法が安全です。
-
JavaScriptで2次元配列の各行の最小値の合計を求める方法
問題 数値を要素とする2次元配列を受け取るJavaScript関数を作成します。この関数は、配列の各行から最小値を1つずつ取り出し、最終的にそれらの合計を返す必要があります。 アプローチ 実装の手順は非常にシンプルです。 各行(部分配列)ごとに最小値を求める 求めた最小値を順番に加算していく 合計値を返す 行内の最小値の計算には、reduce() メソッドと Math.min() を組み合わせるのが便利です。 コード例 以下は実際のコードです。 const arr = [ [2, 5, 1, 6], [6, 8, 5, 8], [3, 6, 7, 5],
-
C++で変更後の配列の最小値が取りうる最大値を求める方法
問題概要 この問題では、サイズnの配列arr[]と数値Sが与えられ、変更後の配列における最小値の最大可能値を求めます。 配列を変更する際には、以下のルールが適用されます。 変更前と変更後の配列要素の合計の差は、ちょうどSでなければならない 変更後の配列に負の値は許されない 変更後の配列の最小値を最大化する必要がある 配列の変更は、任意の要素を増加または減少させることによって行える これらの制約のもとで新しい配列を構成し、その中で最小となる要素の値が最大になるようにします。 例を使って問題を理解しましょう。 入力 : arr[] = {4, 5, 6} S = 2 出力 : 4 説明 この場