ปัญหา
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของตัวเลข arr เป็นอาร์กิวเมนต์แรกและอาร์กิวเมนต์เดียว
อาร์เรย์ arr ของความยาว N ประกอบด้วยจำนวนเต็มทั้งหมดตั้งแต่ 0 ถึง N-1 ฟังก์ชันของเราควรจะค้นหาและส่งกลับความยาวที่ยาวที่สุดของเซต S โดยที่ S[i] ={A[i], A[A[i]], A[A[A[i]]], ... } อยู่ภายใต้ ตามกฎด้านล่าง
สมมติว่าองค์ประกอบแรกใน S เริ่มต้นด้วยการเลือกองค์ประกอบ A[i] ของดัชนี =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