ধরা যাক nums নামক একটি সংখ্যার তালিকা আছে, এবং আমাদের nums-এ এমন সবচেয়ে দীর্ঘ সাবলিস্টের দৈর্ঘ্য খুঁজে বের করতে হবে যাতে প্রতিটি последователни সংখ্যার মধ্যে সমতা সম্পর্ক কম-থেকে (less-than) এবং বেশি-থেকে (greater-than) অপারেশনের মধ্যে বদলাফালা হয়। প্রথম দুটি সংখ্যার অসমতা বা কম-থেকে বা বেশি-থেকে হতে পারে।
উদাহরণস্বরূপ, যদি ইনপুট হয় nums = [1, 2, 6, 4, 5], তবে আউটপুট হবে 4, কারণ সবচেয়ে দীর্ঘ বদলাফালা অসমতা সাবলিস্ট হল [2, 6, 4, 5] যেহেতু 2 < 6 > 4 < 5।
সমাধানের ধাপসমূহ
get_direction() ফাংশন সংজ্ঞায়িত করুন। এটি a, b নিবে।
- a এবং b সমান হলে 0 ফেরত দিন, অন্যথায় a < b হলে -1, অন্যথায় 1 ফেরত দিন।
যদি nums-এর আকার 2-এর চেয়ে ছোট হয়, তবে nums-এর আকার ফেরত দিন।
max_length := 1, cur_length := 1, last_direction := 0 সেট করুন।
i = 0 থেকে nums-এর আকার - 1 পর্যন্ত লুপ চালান:
- direction := get_direction(nums[i], nums[i + 1])
- যদি direction 0 হয়, তবে cur_length := 1
- অন্যথায় যদি direction last_direction-এর সমান হয়, তবে cur_length := 2
- অন্যথায়, cur_length := cur_length + 1
- max_length := max(max_length, cur_length)
- last_direction := 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