跳过正文
  1. leetcode 题解/

189_旋转数组

·97 字·1 分钟

类型:数组

    1. 旋转数组 💛 ⭐

    https://leetcode-cn.com/problems/rotate-array/

    ❓ 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

    输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4]

    💡 整体翻转 + 局部翻转

    先将整个数组翻转,再分别翻转 [0,k%n − 1] 和 [k%n, n - 1]。

    class Solution:
        def rotate(self, nums: List[int], k: int) -> None:
            """
            Do not return anything, modify nums in-place instead.
            """
            n = len(nums)
            k %= n
            if k == 0:
                return
            # 翻转整个数组
            nums[:] = nums[::-1]
            # 翻转 0 - k-1
            nums[: k] = nums[k - 1: : -1]
            # 翻转 k - n-1
            nums[k:] = nums[n - 1: k - 1: -1]

    时间复杂度:O(n),空间复杂度:O(1)