第4题 旋转数组

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

    输入: [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]
  • 首先计算出需要循环移动的次数;
  • 通过数组的 unshift()pop()方法实现旋转,循环执行 k 次。
  • unshift() 方法将把它的参数插入数组的头部,并将已经存在的元素顺次地移到较高的下标处,该方法不会创建新数组,而是直接修改原数组。
  • pop() 方法将删除数组的最后一个元素,把数组长度减 1,并且返回它删除的元素的值
    /**
     * @param {number[]} nums
     * @param {number} k
     * @return {void} Do not return anything, modify nums in-place instead.
     */
    const rotate = function (nums, k) {
      const l = nums.length;
      k = k % l;
      for (let i = 0; i < k; i++) {
        nums.unshift(nums.pop());
      }
    };

方法二

  • 首先还是计算出需要截取的数组元素的长度;
  • 通过数组的 splice() 方法截取需要移动的元素,然后使用扩展运算符‘...‘将截取的元素当作参数,通过 unshift() 方法将截取的 元素放到数组的前边。
  • splice() 方法可删除从 index 处开始的零个或多个元素,然后返回被删除的项目。
  • 数组的扩展运算符...相当于将数组展开,主要的使用场景是用于数组复制、合并等。
  • unshift() 方法的第一个参数将成为数组的 index 为0的新元素,如果还有第二个参数,它将成为 index 为1的新元素,以此类推。
    /**
     * @param {number[]} nums
     * @param {number} k
     * @return {void} Do not return anything, modify nums in-place instead.
     */
    const rotate = function (nums, k) {
      const l = nums.length;
      k = k % l;
      nums.unshift(...nums.splice(l - k, k));
    };
Last Updated:
Contributors: leeguooooo