Computer >> Máy Tính >  >> Lập trình >> Python

Kiểm tra xem một mảng có được sắp xếp và xoay vòng trong Python hay không

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
  • after_sorted:=True
  • đối với tôi trong phạm vi min_index + 1 đến kích thước là nums - 1, thực hiện
    • nếu nums [i]
    • after_sorted:=Sai
    • ra khỏi vòng lặp
  • nếu before_sorted và after_sorted là true và phần tử cuối cùng của nums
  • trả về True
  • nếu không,
    • 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