JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで右側のすべての要素より大きい要素を見つける方法

本記事では、数値の配列を受け取り、元の配列の中で「右側に存在するすべての要素よりも大きい」要素だけを抽出した部分配列を返すJavaScript関数の作成方法を解説します。

例えば、配列 [12, 45, 6, 4, 23, 23, 21, 1] の場合、条件を満たすのは 4523211 です。最右端の要素は右側に要素が存在しないため、常に条件を満たす点に注意してください。

アプローチ:reduceRight()を使った効率的な実装

この問題は、配列を右から左へ走査しながら「それまでに見つけた最大値」を記録していくことで、1回の走査(O(n))で解くことができます。JavaScriptでは Array.prototype.reduceRight() を使うと、この処理を簡潔に実装できます。

コード例

以下がその実装コードです。

const arr = [12, 45, 6, 4, 23, 23, 21, 1];
const largerThanRight = (arr = []) => {
   const creds = arr.reduceRight((acc, val) => {
      let { largest, res } = acc;
      if(val > largest){
         res.push(val);
         largest = val;
      };
      return { largest, res };
   }, {
      largest: -Infinity,
      res: []
   });
   return creds.res;
};
console.log(largerThanRight(arr));

出力

コンソールには以下のように出力されます。

[ 1, 21, 23, 45 ]

コードの解説

reduceRight() は配列を右端から順に処理します。初期値として、それまでの最大値を保持する largest(初期値は -Infinity)と、結果を格納する配列 res を持つオブジェクトを渡します。

各要素について、現在の最大値より大きければ res に追加し、largest を更新します。この処理を繰り返すことで、右側のすべての要素より大きい要素だけが res に残ります。

なお、配列を右から走査しているため、返される結果は昇順([1, 21, 23, 45])になる点にも注意してください。必要に応じて reverse() を使えば、元の配列と同じ順序で取得できます。

  1. JavaScriptでパスカルの三角形のn行目の要素を求める方法

    パスカルの三角形とは パスカルの三角形は、前の行の隣接する要素同士を足し合わせていくことで構成される、三角形状の数列配置です。各行の両端は必ず1となり、内側の各要素はそのすぐ上にある2つの要素の和になります。 パスカルの三角形の最初のいくつかの要素は以下の通りです。 求めるもの 今回は、正の整数 num を唯一の引数として受け取り、パスカルの三角形の num 行目に存在するすべての要素を配列として返すJavaScript関数を作成します。 たとえば、入力が次の場合: const num = 9; 期待される出力は以下のようになります。 const output = [1, 9, 36, 8

  2. JavaScriptで3つの配列に共通する要素の合計を求める方法

    問題今回は、3つの数値型配列を引数として受け取るJavaScript関数を作成します。この関数は、3つの配列すべてに共通して存在する要素だけを抜き出し、それらの合計値を返す必要があります。たとえば、次のような配列が与えられた場合を考えてみましょう。const arr1 = [4, 4, 5, 8, 3]; const arr2 = [7, 3, 7, 4, 1]; const arr3 = [11, 0, 7, 3, 4];この場合、3つの配列すべてに存在するのは「4」と「3」なので、期待される出力は 4 + 3 = 7 となります。解決策のコード例以下がその実装コードです。 { le