Cho mảng nums độ dài n. Kiểm tra có thể xoay phải (cyclic shift) bao nhiêu lần cũng được để được mảng [1,2,...,n] hoặc [n,n-1,...,1] không.
Ví dụ: nums=[5,6,1,2,3,4] → True (xoay 4 lần → [1,2,3,4,5,6]).
Giải thuật (Kiểm tra chênh lệch liền kề)
Trong mảng 1..n xoay vòng, cặp liền kề luôn chênh lệch 1 hoặc n-1 (cặp nối đầu-cuối). Kiểm tra mọi cặp liền kề thỏa mãn điều kiện này.
Ví dụ triển khai
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]))
Đầu vào
[5, 6, 1, 2, 3, 4]
Đầu ra
True