ধরুন, n সংখ্যক ইউনিক মান সম্বলিত একটি অ্যারে দেওয়া হয়েছে। আমাদের যাচাই করতে হবে যে এই অ্যারেটি কি সর্টেড অবস্থা থেকে অ্যান্টি-ক্লকওয়াইজ (বামদিক) রোটেট করা হয়েছে। নোট: কমপক্ষে একবার রোটেশন হতে হবে, অর্থাৎ পুরোপুরি সর্টেড অ্যারেকে সর্টেড-এন্ড-রোটেটেড বলা হবে না।
যেমন, ইনপুট nums = [4,5,6,8,1,3] হলে আউটপুট হবে True, কারণ এটি দুবার ক্লকওয়াইজ রোটেট করলে [1, 3, 4, 5, 6, 8] হয়ে যায় (সর্টেড)।
সমাধানের ধাপসমূহ
- অ্যারেতে ন্যূনতম মান (
min_element) এবং তার ইনডেক্স (min_index) বের করুন। before_sorted = Trueধরুন।i = 1থেকেmin_index-1পর্যন্ত চেক করুন যেnums[i] < nums[i-1]কিনা। যদি হয়, তবেbefore_sorted = False।after_sorted = Trueধরুন।i = min_index+1থেকে শেষ পর্যন্ত চেক করুন যেnums[i] < nums[i-1]কিনা। যদি হয়, তবেafter_sorted = False।- যদি
before_sortedএবংafter_sortedদুটোই True হয় এবংnums[-1] < nums[0]হয়, তবে True ফেরত দিন। - অন্যথায় False ফেরত দিন।
উদাহরণ কোড
def solve(nums):
min_element = min(nums)
min_index = nums.index(min_element)
before_sorted = True
for i in range(1, min_index):
if nums[i] < nums[i-1]:
before_sorted = False
break
after_sorted = True
for i in range(min_index+1, len(nums)):
if nums[i] < nums[i-1]:
after_sorted = False
break
if before_sorted and after_sorted and nums[-1] < nums[0]:
return True
return False
nums = [4,5,6,8,1,3]
print(solve(nums))
ইনপুট
[4,5,6,8,1,3]
আউটপুট
True