সমস্যা
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা একটি সংখ্যার অ্যারে, arr, প্রথম ও একমাত্র আর্গুমেন্ট হিসেবে নেয়।
অ্যারে arr, দৈর্ঘ্য N, ০ থেকে 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