0
点赞
收藏
分享

微信扫一扫

LeetCode_每日一题 面试题 189.轮转数组

何以至千里 2022-03-11 阅读 141

文章目录

一、题目

描述:给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

示例1:

示例2:

提示:

二、题解

错误思路

var rotate = function(nums, k) {
  let j = nums.length
  while (k > 0) {
    let temp = nums[j - 1]
    for (let i = j-1; i>=0; i--) {
      nums[i] = nums[i-1]
    }
    nums[0] = temp
    k--
  }
  return nums
};
console.log(rotate([1, 2, 3, 4, 5, 6, 7], 3))

输出:[ 5, 6, 7, 1, 2, 3, 4]

正确思路

方法1

思路:

// 使用额外数组
var rotate = function(nums, k) {
  let l = nums.length
  // 实例化array,给新数组添加9个占位
  let array = new Array(l)
  // 将数填入到新的数组当中
  for (let i = 0; i < l; i++) {
    // 3除9=3,9除9=0,11除9=2
    array[(i+k)%l] =nums[i]
  }
  // 将所有数从新数组添加到nums中
  for (let i = 0; i < l; i++) {
    nums[i]=array[i]
  }
};

方法2

思路:假设数组为[1, 2, 3, 4, 5, 6, 7, 8, 9]需要轮转3次

//翻转数组
var rotate = function(nums, k) {
  const reverse = (nums, start, end) => {
    while (start < end) {
      const temp = nums[start];
      nums[start] = nums[end];
      nums[end] = temp;
      start += 1;
      end -= 1;
    }
  }
    k %= nums.length;
    reverse(nums, 0, nums.length - 1);
    reverse(nums, 0, k - 1);
    reverse(nums, k, nums.length - 1);
  console.log(nums)
}
举报

相关推荐

0 条评论