LeetCode题解:189. 旋转数组,JavaScript,暴力法,详细注释

原题链接:https://leetcode-cn.com/problems/rotate-array/

此方法对应官方题解的第一种方法,但官方只贴了代码,没有讲解,这里梳理一下思路:

  1. 该题实际上是要求将数组的最后k位,移动到数组的前面。
  2. 假设输入: [1,2,3,4,5,6,7] 和 k = 3。
  3. 暴力法的第一层循环,每次会取出数组的最后一位。
  4. 第二层循环,当index=0时,将target放入数组的0位置,nums[0]缓存在target中,此时数组变成了[7,2,3,4,5,6]
  5. 接下来的循环就是将数组每一位向后移动的过程,第二层每次循环的结果如下:
j = 0, [7, 2, 3, 4, 5, 6, 7]
j = 1, [7, 1, 3, 4, 5, 6, 7]
j = 2, [7, 1, 2, 4, 5, 6, 7]
j = 3, [7, 1, 2, 3, 5, 6, 7]
j = 4, [7, 1, 2, 3, 4, 6, 7]
j = 5, [7, 1, 2, 3, 4, 5, 7]
j = 6, [7, 1, 2, 3, 4, 5, 6]

第二层循环完成了将数组最后一位,移动到数组第一位的过程。

  1. 之后继续第一层循环,最终将数组的后3位都移动到了数组前方,得到结果:[5,6,7,1,2,3,4]
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var rotate = function (nums, k) {
  for (let i = 0; i < k; i++) {
    // 取出数组最末的一个
    let target = nums[nums.length - 1];
    // 将target移动到数组第一位,之后将数组剩余部分都往后移动一位
    for (let j = 0; j < nums.length; j++) {
      let temp = nums[j];
      nums[j] = target;
      target = temp;
    }
  }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值