একটি অ্যারে nums (unique elements) দেওয়া আছে। যাচাই করতে হবে যে কি একটি সাবঅ্যারে রিভার্স করে পুরো অ্যারেটি সর্ট করা যায়। ইতিমধ্যে সর্টেড থাকলেও True।
উদাহরণ
ইনপুট: nums = [4, 6, 27, 25, 15, 9, 37, 42]
আউটপুট: True
ব্যাখ্যা: সাবঅ্যারে [9, 15, 25, 27] রিভার্স করলে সর্টেড হয়।
অ্যালগরিদম
- প্রথম غير-সর্টেড জায়গা খুঁজুন (i)।
- তারপর ক্রমাগত কমমান অংশ খুঁজুন (j)।
- শর্ত যাচাই: j-র পরের এলিমেন্ট i-1-তম এলিমেন্টের চেয়ে বড়, এবং বাকি অংশ সর্টেড।
উদাহরণ কোড
def solve(nums):
n = len(nums)
if n == 1:
return True
i = 1
for i in range(1, n):
if nums[i - 1] < nums[i]:
if i == n:
return True
else:
break
j = i
while j < n and nums[j] < nums[j - 1]:
if i > 1 and nums[j] < nums[i - 2]:
return False
j += 1
if j == n:
return True
k = j
if nums[k] < nums[i - 1]:
return False
while k > 1 and k < n:
if nums[k] < nums[k - 1]:
return False
k += 1
return True
nums = [4, 6, 27, 25, 15, 9, 37, 42]
print(solve(nums)) # Output: True
ইনপুট
[4, 6, 27, 25, 15, 9, 37, 42]
আউটপুট
True