查詢並返回 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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP