查詢並返回 JavaScript 中集合的最長長度


問題

我們需要編寫一個 JavaScript 函式,該函式將數字陣列 arr 作為第一個也是唯一的引數。

長度為 N 的陣列 arr 包含從 0 到 N-1 的所有整數。我們的函式應該查詢並返回集合 S 的最長長度,其中 S[i] = {A[i], A[A[i]], A[A[A[i]]], ...} 受制於以下規則。

假設 S 中的第一個元素從索引 = i 的元素 A[i] 開始選擇,則 S 中的下一個元素應該是 A[A[i]],然後是 A[A[A[i]]]…以此類推,我們在 S 中出現重複元素之前停止新增。

例如,如果函式的輸入為:

const arr = [5, 4, 0, 3, 1, 6, 2];

則輸出應為:

const output = 4;

輸出解釋

A[0] = 5, A[1] = 4, A[2] = 0, A[3] = 3, A[4] = 1, A[5] = 6, A[6] = 2.

最長的 S[K] 之一

S[0] = {A[0], A[5], A[6], A[2]} = {5, 6, 2, 0}

示例

以下是程式碼:

 線上演示

const arr = [5, 4, 0, 3, 1, 6, 2];
const arrayNesting = (arr = []) => {
   const visited = {}
   const aux = (index) => {
      if (visited[index]) {
         return 0
      }
      visited[index] = true
      return aux(arr[index], visited) + 1
   }
      let max = 0
      arr.forEach((n, index) => {
         if (!visited[index]) {
            max = Math.max(max, aux(index))
         }
   )
   return max
}
console.log(arrayNesting(arr));

輸出

以下是控制檯輸出:

4

更新於:2021年4月21日

174 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.