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

JavaScriptを使用して配列内のフィボナッチ数列を検索する


フィボナッチ数列:

シーケンスX_1、X_2、...、X_nは、次の場合にフィボナッチです。

  • n> =3

  • X_i + X_ {i + 1} =X_ {i+2}すべてのi+2 <=n

問題

最初で唯一の引数として、数値の配列arrを受け取るJavaScript関数を作成する必要があります。この関数は、配列arrに存在する最長のフィボナッチサブシーケンスの長さを見つけて返す必要があります。

サブシーケンスは、残りの要素の順序を変更せずに、arrから任意の数の要素(なしを含む)を削除することにより、別のシーケンスarrから派生します。

たとえば、関数への入力が

入力

const arr = [1, 3, 7, 11, 14, 25, 39];

出力

const output = 5;

出力の説明

最長のフィボナッチサブシーケンスは[3、11、14、25、39]であるため

コードは次のとおりです:

const arr = [1, 3, 7, 11, 14, 25, 39];
const longestFibonacci = (arr = []) => {
   const map = arr.reduce((acc, num, index) => {
      acc[num] = index
      return acc
   }, {})
   const memo = arr.map(() => arr.map(() => 0))
   let max = 0
   for(let i = 0; i < arr.length; i++) {
      for(let j = i + 1; j < arr.length; j++) {
         const a = arr[i]
         const b = arr[j]
         const index = map[b - a]
         if(index < i) {
            memo[i][j] = memo[index][i] + 1
         }
         max = Math.max(max, memo[i][j])
      }
   }
   return max > 0 ? max + 2 : 0
};
console.log(longestFibonacci(arr));

出力

5

  1. JavaScriptで配列の中央値インデックスを見つける

    問題 1次元空間内のさまざまな小惑星の位置を表す配列arrを取り込むJavaScript関数を作成する必要があります。 各小惑星について、絶対値はそのサイズを表し、符号はその方向を表します(正の意味は右、負の意味は左)。各小惑星は同じ速度で移動します。 私たちの機能は、すべての衝突後の小惑星の状態を見つけることになっています。 2つの小惑星が出会うと、小さい方の小惑星が爆発します。両方が同じサイズの場合、両方が爆発します。同じ方向に移動する2つの小惑星が出会うことはありません。 たとえば、関数への入力が-の場合 入力 const arr = [1, 7, 3, 6, 5, 6];

  2. JavaScriptで配列を昇順に変換する

    シーケンスの増加 (0 <=i <=n-2)のようにすべてのi(0ベース)に対してarr [i] <=arr [i + 1]が成り立つ場合、配列を増加として定義します。 問題 最初で唯一の引数として、整数の配列arrを受け取るJavaScript関数を作成する必要があります。 この関数は、配列の最大1つの要素を変更することで、この配列を増加する配列に変換できるかどうかを判断する必要があります。 そうすることができれば、trueを返し、そうでない場合はfalseを返す必要があります。 たとえば、関数への入力が 入力 const arr = [8, 3, 3, 7, 9]; 出力