মান লিজিয়ে আমাদের একটি সংখ্যা লিস্ট nums আছে, আমাদের যাচাই করতে হবে রোটেশন (rotation) ব্যবহার করে nums সর্ট করা সম্ভব কিনা। রোটেশনে আমরা nums-এর শেষ থেকে কিছু কন্টিগুয়াস এলিমেন্ট শিফট করে অ্যারের সামনে রাখতে পারি।
যেমন, ইনপুট যদি nums = [4,5,6,1,2,3] হয়, তবে আউটপুট হবে True কারণ শেষ তিনটি এলিমেন্ট রোটেট করে সামনে আনলে সর্ট হয়ে যায়।
সমাধানের ধাপসমূহ
n := nums-এর সাইজ- যদি
numsসর্টেড হয়, তবে:Trueরিটার্ন করুন
- অন্যথায়:
status := Truei০ থেকেn - 2পর্যন্ত, করুন:- যদি
nums[i] > nums[i + 1]হয়, তবে:- লুপ থেকে বের হোন
- যদি
i := i + 1kiথেকেn - 2পর্যন্ত, করুন:- যদি
nums[k] > nums[k + 1]হয়, তবে:status := False- লুপ থেকে বের হোন
- যদি
- যদি
statusমিথ্যা (false) হয়, তবে:Falseরিটার্ন করুন
- অন্যথায়:
- যদি
nums[n - 1] <= nums[0]হয়, তবে:Trueরিটার্ন করুন
Falseরিটার্ন করুন
- যদি
উদাহরণ
বेहतर বোঝার জন্য নিচের বাস্তবায়নটি দেখুন:
def solve(nums):
n = len(nums)
if all(nums[i] <= nums[i + 1] for i in range(len(nums) - 1)):
return True
else:
status = True
for i in range(n - 1):
if nums[i] > nums[i + 1]:
break
i += 1
for k in range(i, n - 1):
if nums[k] > nums[k + 1]:
status = False
break
if not status:
return False
else:
if nums[n - 1] <= nums[0]:
return True
return False
nums = [4,5,6,1,2,3]
print(solve(nums))
ইনপুট
[4,5,6,1,2,3]
আউটপুট
True