给定一个数组,将数组中的元素向右移动 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) // 再反转剩下的
}