ধরুন আমাদের কাছে সংখ্যা নামক সংখ্যার একটি তালিকা আছে, যখন আমরা তালিকা থেকে এক বা শূন্য উপাদান সরিয়ে ফেলতে পারি তখন আমাদের একটি সংলগ্ন কঠোরভাবে বর্ধিত সাবলিস্টের সর্বাধিক দৈর্ঘ্য খুঁজে বের করতে হবে৷
সুতরাং, ইনপুট যদি nums =[30, 11, 12, 13, 14, 15, 18, 17, 32] এর মত হয়, তাহলে আউটপুট হবে 7, যেমন আমরা তালিকা থেকে 18 বাদ দিলে আমরা পেতে পারি [11, 12, 13, 14, 15, 17, 32] যা দীর্ঘতম, সংলগ্ন, কঠোরভাবে ক্রমবর্ধমান সাবলিস্ট, এবং এর দৈর্ঘ্য হল 7৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব−
-
n :=সংখ্যার আকার
-
pre :=n আকারের একটি তালিকা এবং 1s দিয়ে পূরণ করুন
-
আমি 1 থেকে n - 1 রেঞ্জের জন্য, কর
-
যদি nums[i]> nums[i - 1], তারপর
-
pre[i] :=pre[i - 1] + 1
-
-
-
suff :=n আকারের একটি তালিকা এবং 1s দিয়ে পূরণ করুন
-
n - 2 থেকে -1 রেঞ্জে i এর জন্য, 1 দ্বারা হ্রাস করুন, করুন
-
যদি nums[i]
-
suff[i] :=suff[i + 1] + 1
-
-
-
উত্তর :=প্রাক-এর সর্বোচ্চ এবং সর্বাধিক suff-এর সর্বোচ্চ মান
-
1 থেকে n - 1 রেঞ্জের জন্য, করুন
-
যদি nums[i - 1]
-
উত্তর :=সর্বাধিক উত্তর এবং (প্রি[i - 1] + suff[i + 1])
-
-
-
উত্তর ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class Solution: def solve(self, nums): n = len(nums) pre = [1] * n for i in range(1, n - 1): if nums[i] > nums[i - 1]: pre[i] = pre[i - 1] + 1 suff = [1] * n for i in range(n - 2, -1, -1): if nums[i] < nums[i + 1]: suff[i] = suff[i + 1] + 1 ans = max(max(pre), max(suff)) for i in range(1, n - 1): if nums[i - 1] < nums[i + 1]: ans = max(ans, pre[i - 1] + suff[i + 1]) return ans ob = Solution() nums = [30, 11, 12, 13, 14, 15, 18, 17, 32] print(ob.solve(nums))
ইনপুট
[30, 11, 12, 13, 14, 15, 18, 17, 32]
আউটপুট
7