ปัญหา
เราจำเป็นต้องเขียนฟังก์ชัน 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