ধরুন আমাদের কাছে সংখ্যা নামক সংখ্যার একটি তালিকা আছে, আমাদের একটি সংলগ্ন কঠোরভাবে বর্ধিত সাবলিস্টের সর্বাধিক দৈর্ঘ্য খুঁজে বের করতে হবে। আমরা তালিকা থেকে সর্বাধিক একক উপাদান অপসারণ করার অনুমতি দেওয়া হয়৷
সুতরাং, যদি ইনপুটটি nums =[35, 5, 6, 7, 8, 9, 12, 11, 26] এর মতো হয়, তাহলে আউটপুট হবে 7, কারণ যদি আমরা সংখ্যা থেকে 12 বাদ দেই, তালিকাটি হবে [5] , 6, 7, 8, 9, 11, 26], দৈর্ঘ্য হল 7, এটি দীর্ঘতম, সংলগ্ন, কঠোরভাবে বর্ধমান উপ-তালিকা।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- সংখ্যা খালি হলে, তারপর
- রিটার্ন 0
- শেষ :=সংখ্যার মতো আকারের একটি তালিকা এবং 1 দিয়ে পূরণ করুন
- শুরু করুন :=সংখ্যার মতো আকারের একটি তালিকা এবং 1 দিয়ে পূরণ করুন
- আমি রেঞ্জ 1 থেকে সংখ্যার আকার - 1 এর জন্য, কর
- যদি nums[i]> nums[i - 1], তারপর
- end[i] :=end[i - 1] + 1
- যদি nums[i]> nums[i - 1], তারপর
- j-এর জন্য সংখ্যার পরিসরের আকার - 2 থেকে 0, 1 দ্বারা হ্রাস করুন, করুন
- যদি nums[j + 1]> nums[j] হয়, তাহলে
- start[j] :=start[j + 1] + 1
- যদি nums[j + 1]> nums[j] হয়, তাহলে
- res :=শেষের উপাদান এবং শুরুর উপাদানের সর্বাধিক
- k এর জন্য রেঞ্জ 1 থেকে সংখ্যার আকার - 2, করুন
- যদি সংখ্যা [k - 1]
- res :=res এর সর্বোচ্চ এবং (end[k - 1] + start[k + 1])
- যদি সংখ্যা [k - 1]
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(nums): if not nums: return 0 end = [1 for i in nums] start = [1 for i in nums] for i in range(1, len(nums)): if nums[i] > nums[i - 1]: end[i] = end[i - 1] + 1 for j in range(len(nums) - 2, -1, -1): if nums[j + 1] > nums[j]: start[j] = start[j + 1] + 1 res = max(max(end), max(start)) for k in range(1, len(nums) - 1): if nums[k - 1] < nums[k + 1]: res = max(res, end[k - 1] + start[k + 1]) return res nums = [35, 5, 6, 7, 8, 9, 12, 11, 26] print(solve(nums))
ইনপুট
[35, 5, 6, 7, 8, 9, 12, 11, 26]
আউটপুট
7