ধরুন আমাদের কাছে সংখ্যার একটি তালিকা আছে যাকে nums বলা হয় যা একটি বৃত্তাকার তালিকার প্রতিনিধিত্ব করছে। আমাদের অ-সংলগ্ন সংখ্যার বৃহত্তম যোগফল খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[10, 3, 4, 8], তাহলে আউটপুট 14 হবে, যেমন আমরা 10 এবং 4 নিতে পারি। আমরা 10 এবং 8 নিতে পারি না যেহেতু তারা সংলগ্ন।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- n :=সংখ্যার আকার
- সংখ্যা 1 :=সংখ্যা[সূচী 0 থেকে n - 2]
- সংখ্যা2 :=সংখ্যা[সূচী 1 থেকে শেষ]
- একটি ফাংশন সংজ্ঞায়িত করুন f()। এর জন্য i লাগবে
- যদি i>=nums1 এর আকার , তারপর
- রিটার্ন 0
- সর্বোচ্চ সংখ্যা 1 [i] + f(i + 2) এবং f(i + 1) ফেরত দিন
- একটি ফাংশন সংজ্ঞায়িত করুন g()। এটি j লাগবে
- যদি j>=সংখ্যার আকার 2 , তারপর
- রিটার্ন 0
- সর্বোচ্চ সংখ্যা 2[j] + g(j + 2) এবং g(j + 1) ফেরত দিন
- প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
- সর্বোচ্চ f(0) এবং g(0) ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class Solution: def solve(self, nums): n = len(nums) nums1 = nums[: n - 1] nums2 = nums[1:] def f(i): if i >= len(nums1): return 0 return max(nums1[i] + f(i + 2), f(i + 1)) def g(j): if j >= len(nums2): return 0 return max(nums2[j] + g(j + 2), g(j + 1)) return max(f(0), g(0)) ob = Solution() nums = [10, 3, 4, 8] print(ob.solve(nums))
ইনপুট
[10, 3, 4, 8]
আউটপুট
14