📅  最后修改于: 2023-12-03 15:42:02.569000             🧑  作者: Mango
当我们需要将一个给定数组修改为非递减数组时,通过旋转数组可以实现。
从数组最后开始循环,逐个比较当前值和前一个值的大小。
for i in range(len(nums)-1, 0, -1):
if nums[i] < nums[i-1]:
rotate_point = i
break
若当前值小于前一个值,则记录当前位置为旋转点。
将旋转点及其之前的数组反转。
nums[:rotate_point] = reversed(nums[:rotate_point])
将旋转点及其之后的数组反转。
nums[rotate_point:] = reversed(nums[rotate_point:])
最后将整个数组反转。
nums[:] = reversed(nums[:])
def rotate_array(nums):
"""
通过旋转将给定数组修改为非递减数组
"""
rotate_point = len(nums)
for i in range(len(nums)-1, 0, -1):
if nums[i] < nums[i-1]:
rotate_point = i
break
nums[:rotate_point] = reversed(nums[:rotate_point])
nums[rotate_point:] = reversed(nums[rotate_point:])
nums[:] = reversed(nums[:])
return nums
nums = [7, 6, 5, 4, 3, 2, 1]
print(rotate_array(nums)) # [1, 2, 3, 4, 5, 6, 7]