假设我们有一个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