检查数组是否在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