Giả sử chúng ta có một mảng gồm n giá trị duy nhất. Chúng ta phải kiểm tra xem mảng này có được sắp xếp và xoay ngược chiều kim đồng hồ hay không. Ở đây cần có ít nhất một lần xoay để một mảng được sắp xếp đầy đủ không được coi là đã được sắp xếp và xoay.
Vì vậy, nếu đầu vào giống như nums =[4,5,6,8,1,3], thì đầu ra sẽ là Đúng vì chúng ta có thể xoay hai lần theo chiều kim đồng hồ thì nó sẽ được sắp xếp như [1, 3, 4, 5, 6, 8].
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- min_element:=tối thiểu nums
- min_index:=chỉ mục của min_element tính bằng nums
- before_sorted:=True
- đối với tôi trong phạm vi từ 1 đến min_index - 1, thực hiện
- nếu nums [i]
- before_sorted:=False
- ra khỏi vòng lặp
- nếu nums [i]
- nếu nums [i]
- after_sorted:=Sai
- ra khỏi vòng lặp
- trả về Sai
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
def solve(nums): min_element = 999999 min_index = -1 min_element = min(nums) min_index = nums.index(min_element) before_sorted = True for i in range(1, min_index): if nums[i] < nums[i - 1]: before_sorted = False break after_sorted = True for i in range(min_index + 1, len(nums)): if nums[i] < nums[i - 1]: after_sorted = False break if before_sorted and after_sorted and nums[-1] < nums[0]: return True else: return False nums = [4,5,6,8,1,3] print(solve(nums))
Đầu vào
[4,5,6,8,1,3]
Đầu ra
True