189. Rotate Array

Leetcode link

题目简介

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {void} Do not return anything, modify nums in-place instead.
 */

题目给我们一个数字数组 nums 以及一个数字 k

要求我们在本地旋转 nums 的元素 k 次,每次旋转一位

解题思路

我们以 nums = [1,2,3,4,5,6,7], k = 3 为例

我们只需要分成三步:

  1. 把整个数组反转:nums = [7,6,5,4,3,2,1]
  2. 0~k-1 反转:nums = [5,6,7,4,3,2,1]
  3. k~nums.length-1 反转:nums = [5,6,7,1,2,3,4]

完成~

Javascript

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var rotate = function(nums, k) {
    const len = nums.length
    k = k % len
    if(k === 0) {
        return
    }

    const reverse = (left, right) => {
        while(left < right) {
            ;[nums[left], nums[right]] = [nums[right], nums[left]]
            left++
            right--
        }
    }

    reverse(0, len-1)
    reverse(0, k-1)
    reverse(k, len-1)
};

results matching ""

    No results matching ""