fat-cat

旋转数组

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

示例

输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4]

解析

const rotate = (nums, k) => {
    const len = nums.length
    const p = k % len

    const reverse = (list, start, end) => {
        while(start < end) {
            let temp = list[start]
            list[start++] = list[end]
            list[end--] = temp
        }
    }

    reverse(nums, 0, len - 1) // 先反转全部的元素
    reverse(nums, 0, p - 1) // 再反转前 p 个元素
    reverse(nums, p, len - 1) // 再反转剩下的
}