189. Rotate Array

25 年 10 月 18 日 星期六
158 字
1 分钟

189. Rotate Array

Screenshot 2025-10-18 at 10.43.03 pm
js
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var rotate = function (nums, k) {
  k = k % nums.length
  const tmp = k ? nums.slice(-k) : []
  console.log(tmp)
  nums.splice(-k, k)
  nums.splice(0, 0, ...tmp)
}

一句话思路:原地反转所有元素,在反转前k个元素,在反转后n-k个元素

lc189.png

更好的答案

js
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var rotate = function (nums, k) {
  k %= nums.length
  // 反转 [i, j] 的所有元素
  function reverse(i, j) {
    while (i < j) {
      ;[nums[i], nums[j]] = [nums[j], nums[i]]
      i++
      j--
    }
  }
  reverse(0, nums.length - 1)
  reverse(0, k - 1)
  reverse(k, nums.length - 1)
}

文章标题:189. Rotate Array

文章作者:Sirui Chen

文章链接:https://blog.siruichen.me/posts/189_rotate_array[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。