Giả sử ta có mảng nums, ta phải kiểm tra xem mảng này có ban đầu được sắp xếp theo thứ tự không giảm và sau đó bị xoay một số vị trí (có thể là 0) hay không. Mảng có thể chứa phần tử trùng lặp.
Ví dụ: nums = [12,15,2,5,6,9], kết quả là True, vì nó bị xoay phải 2 vị trí.
Giải thuật
j := 0- While
j < len(nums) - 1vànums[j] <= nums[j + 1]:j++ res := nums[j+1:] + nums[:j+1](ghép lại mảng sau khi xoay ngược)- For
itừ 0 đếnlen(res) - 1:- Nếu
res[i] > res[i + 1]: trả vềFalse
- Nếu
- Trả về
True
Ví dụ (Python)
def solve(nums):
j = 0
while j < len(nums) - 1 and nums[j] <= nums[j + 1]:
j += 1
res = nums[j + 1:] + nums[:j + 1]
for i in range(len(res) - 1):
if res[i] > res[i + 1]:
return False
return True
nums = [12, 15, 2, 5, 6, 9]
print(solve(nums))
Input
[12,15,2,5,6,9]
Output
True