ধরুন আমাদের কাছে সংখ্যার একটি তালিকা আছে যাকে বলা হয় সংখ্যা, এবং দীর্ঘতম সাবলিস্ট ইননামের দৈর্ঘ্য খুঁজে বের করি যাতে প্রতিটি পরপর সংখ্যার মধ্যে সমতা সম্পর্ক বিকল্পভাবে কম-এর চেয়ে বেশি এবং ক্রিয়াকলাপের মধ্যে পরিবর্তিত হয়। প্রথম দুটি সংখ্যার অসমতা হয় কম-এর চেয়ে বা বড়-এর চেয়েও হতে পারে৷
সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[1, 2, 6, 4, 5], তাহলে আউটপুট হবে 4, কারণ দীর্ঘতম অসমতার বিকল্প সাবলিস্ট হল [2, 6, 4, 5] 2 <6> 4 <5.
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি ফাংশন get_direction() সংজ্ঞায়িত করুন। এটি একটি, b
লাগবে৷-
0 ফেরত দিন যদি a হয় b এর মতো অন্যথায় -1 যদি a
-
-
যদি সংখ্যার আকার <2, তাহলে
-
সংখ্যার রিটার্ন সাইজ
-
-
max_length :=1, cur_length :=1, last_direction :=0
-
আমি 0 থেকে সংখ্যার আকার - 1 এর রেঞ্জের জন্য, করুন
-
দিক:=get_direction(সংখ্যা[i], সংখ্যা[i + 1])
-
যদি দিকনির্দেশ 0 এর মত হয়, তাহলে
-
cur_length :=1
-
-
অন্যথায় যখন দিকনির্দেশ last_direction এর মত হয়, তখন
-
cur_length :=2
-
-
অন্যথায়,
-
cur_length :=cur_length + 1
-
-
max_length :=সর্বাধিক max_length এবং cur_length
-
last_direction :=দিকনির্দেশ
-
-
max_length
ফেরত দিন
আসুন আরও ভাল বোঝার জন্য নিম্নলিখিত বাস্তবায়ন দেখি—
উদাহরণ
class Solution: def solve(self, nums): if len(nums) < 2: return len(nums) def get_direction(a, b): return 0 if a == b else -1 if a < b else 1 max_length = 1 cur_length = 1 last_direction = 0 for i in range(len(nums) - 1): direction = get_direction(nums[i], nums[i + 1]) if direction == 0: cur_length = 1 elif direction == last_direction: cur_length = 2 else: cur_length += 1 max_length = max(max_length, cur_length) last_direction = direction return max_length ob = Solution() nums = [1, 2, 6, 4, 5] print(ob.solve(nums))
ইনপুট
[1, 2, 6, 4, 5]
আউটপুট
4