মনে করুন একটি সংখ্যার তালিকা আছে যার নাম A এবং অন্য একটি সংখ্যা k। আমাদের একটি নতুন সেট তৈরি করতে হবে সম্ভাব্য উপাদানগুলির {A[k], A[A[k]], A[A[A[k]]], ... } এবং এটি ইনডেক্সের বাইরে যাওয়ার আগে থামাতে হবে। এই সেটের আকার খুঁজে বের করতে হবে, অন্যথায় -1 ফেরত দিতে হবে যদি কোনো সাইকেল থাকে।
উদাহরণস্বরূপ, ইনপুট A = [1,2,3,4,5,6,7], k = 1 হলে আউটপুট হবে 6 কারণ A[1] = 2, A[2] = 3, A[3] = 4, A[4] = 5, A[5] = 6, A[6] = 7, তাই সেটটি হল {2,3,4,5,6,7}, যার আকার 6।
সমাধানের ধাপসমূহ
- seen := একটি নতুন সেট
- যখন k < A-এর আকার, তখন
- যদি A[k] seen-এ থাকে, তবে
- -1 ফেরত দিন
- A[k]-কে seen-এ যোগ করুন
- k := A[k]
- যদি A[k] seen-এ থাকে, তবে
- seen-এর আকার ফেরত দিন
উদাহরণ
class Solution:
def solve(self, A, k):
seen = set()
while k < len(A):
if A[k] in seen:
return -1
seen.add(A[k])
k = A[k]
return len(seen)
ob = Solution()
print(ob.solve([1,2,3,4,5,6,7], 1))ইনপুট
[1,2,3,4,5,6,7], 1
আউটপুট
6