检查数组是否在Python中排序和旋转

假设我们有一个n个唯一值的数组。我们必须检查此数组是否已排序并逆时针旋转。在这里,至少需要旋转一圈,因此完全排序的数组不被视为已排序和旋转。

因此,如果输入类似于nums = [4,5,6,8,1,3],则输出将为True,因为我们可以沿顺时针方向旋转两次,然后将其排序为[1、3, 4,5,6,8]。

为了解决这个问题,我们将遵循以下步骤-

  • min_element:=最小数字

  • min_index:= min_element的索引,以数字为单位

  • before_sorted:=真

  • 对于范围1至min_index-1中的i

    • before_sorted:=错误

    • 从循环中出来

    • 如果nums [i] <nums [i-1],则

    • after_sorted:=真

    • 对于范围在min_index + 1到nums大小中的i-1,执行

      • after_sorted:=错误

      • 从循环中出来

      • 如果nums [i] <nums [i-1],则

    • 如果before_sorted和after_sorted为true,并且nums <nums [0]的最后一个元素,则

      • 返回True

    • 除此以外,

      • 返回False

    让我们看下面的实现以更好地理解-

    示例

    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))

    输入值

    [4,5,6,8,1,3]
    输出结果
    True