给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
使用空间复杂度为 O(1) 的 原地 算法
分析
- 这个有点像翻转单词,但是只是两个单词
- 但是思想一样,可以先总体翻转,在单独翻转
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
def reverse(nums, start, end):
while start < end:
nums[start], nums[end] = nums[end], nums[start]
start += 1
end -= 1
n = len(nums)
k %= n
reverse(nums, 0, n - 1)
reverse(nums, 0, k - 1)
# 陷阱1, 闭区间是包含边界的
reverse(nums, k, n - 1)