📌  相关文章
📜  通过旋转将给定数组修改为非递减数组(1)

📅  最后修改于: 2023-12-03 15:42:02.569000             🧑  作者: Mango

通过旋转将给定数组修改为非递减数组

当我们需要将一个给定数组修改为非递减数组时,通过旋转数组可以实现。

旋转数组的操作流程
  1. 从数组最后开始循环,逐个比较当前值和前一个值的大小。

    for i in range(len(nums)-1, 0, -1):
        if nums[i] < nums[i-1]:
            rotate_point = i
            break
    
  2. 若当前值小于前一个值,则记录当前位置为旋转点。

  3. 将旋转点及其之前的数组反转。

    nums[:rotate_point] = reversed(nums[:rotate_point])
    
  4. 将旋转点及其之后的数组反转。

    nums[rotate_point:] = reversed(nums[rotate_point:])
    
  5. 最后将整个数组反转。

    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]