একটি লিস্ট nums (লেংথ n) দেওয়া আছে। কি এটি রাইট রোটেশন দিয়ে [1,2,...,n] বা [n,n-1,...,1] বানানো সম্ভব?
ইনপুট উদাহরণ
nums = [5, 6, 1, 2, 3, 4]
আউটপুট: True (৪ বার রাইট রোটেট করলে [1,2,3,4,5,6])
অ্যালগরিদম
একটি সার্কুলার অ্যারে ১..n বা n..1 হলে, প্রতিটি এডজেসেন্ট পেয়ারের ডিফারেন্স বা ১ হবে অথবা n-1 (র্যাপ অ্যারাউন্ড)। এই প্রপার্টি চেক করুন।
পাইথন কোড
def solve(nums):
n = len(nums)
for i in range(1, n):
diff = abs(nums[i-1] - nums[i])
if diff != 1 and diff != n - 1:
return False
return True
# টেস্ট
print(solve([5, 6, 1, 2, 3, 4])) # True
ব্যাখ্যা
সার্কুলার পারমুটেশন চেক। যদি সব এডজেসেন্ট ডিফারেন্স ১ বা n-1 হয়, তবে এটি ১..n বা n..1-এর রোটেশন। সময় O(n)।