「数组」leetcode 189.旋转数组(中等)

286 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

一、了解题目

附上原题链接:189. 旋转数组

给定一个数组,将数组中的元素向右移动 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]

二、题解分析

这道题通过使用额外的数组来进行解析。具体如下:

  • 定义一个新的数组 newArr
  • 使用 (i + k) % n 取余的方式,将 nums 数组上的数据赋值到 newArr 上;
  • 相反, newArr 的内容有了,最后把 newArr 的数据给赋值回 nums 数组上。

三、代码实现

依据上面的题解,我们将用 js 来实现这道题。具体实现代码如下:

let rotate = function(nums, k) {
    const n = nums.length;
    const newArr = new Array(n);
    for(let i = 0; i < n; i++){
        newArr[(i + k) % n] = nums[i];
    }
    for(let i = 0; i < n; i++) {
        nums[i] = newArr[i];
    }
}
​
/**
 * 时间复杂度:O(n),其中 n 为数组的长度
 * 空间复杂度:O(n)
 */

我们用一组数据来写一下所有可能的结果。假设我们输入 nums[1,2,3,4,5,6,7]k 值为 3 。那么它的调试路线如下图所示:

旋转数组.png


以上就是关于旋转数组的题解,不知道对小伙伴们是否有帮助呢?

我们下期见👋👋👋