在Python中检查数组是否排序且旋转
假设我们有一个名为nums的数组,我们必须检查数组最初是否按非降序排序,然后将其旋转了一些位置(可能为零)或未旋转。 数组中也可能存在重复项。
因此,如果输入为nums = [12,15,2,5,6,9],则输出为True,因为它向右旋转了两个位置。
为了解决这个问题,我们将遵循以下步骤:
- j:=0
-
while j < nums大小 – 1 且 nums [j] <= nums [j + 1],执行
- j := j + 1
- res:=(从索引j + 1到nums结尾的nums子数组)连接(索引0到nums j的子数组)
-
for i in range 0 to size of res – 1, do
- if res [i] > res [i + 1],则
- 返回False
- if res [i] > res [i + 1],则
- 返回True
示例(Python)
让我们看一下以下实现以更好地理解:
def solve(nums):
j = 0
while (j < len(nums) - 1 and nums[j] <= nums[j + 1]):
j += 1
res = nums[j + 1:len(nums)] + nums[0:j + 1]
for i in range(len(res) - 1):
if res[i] > res[i + 1]:
return False
return True
nums = [12,15,2,5,6,9]
print(solve(nums))
输入
[12,15,2,5,6,9]
输出
True