Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

ค้นหาและส่งคืนความยาวที่ยาวที่สุดของชุดใน JavaScript


ปัญหา

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