Typescript-Algorithms
    Preparing search index...

    Variable rotate_arrayConst

    rotate_array: (nums: number[], k: number) => void = rotate

    189.轮转数组

    给定一个整数数组 nums,将数组中的元素向右轮转 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]


    输入: nums = [-1,-100,3,99], k = 2
    输出: [3,99,-1,-100]
    解释: 向右轮转 1 步: [99,-1,-100,3]
    向右轮转 2 步: [3,99,-1,-100]


    • 1 <= nums.length <= 10^5
    • -2^{31} <= nums[i] <= 2^{31} - 1
    • 0 <= k <= 10^5

    Type declaration

      • (nums: number[], k: number): void
      • Do not return anything, modify nums in-place instead.

        Parameters

        • nums: number[]
        • k: number

        Returns void

    找轮转规律,看三个角色的关系:轮转次数k,数组长度nums.length,位置i剩余向右轮转次数maxX = nums.length - i - 1。 先看k跟数组长度关系,k小于数组长度,那么k一定会转至少一轮让整个数组元素回到原来位置,比如这里0转3次回到原位,那么需要不断削减k直到小于nums.length 削减完成后,再看k跟maxX关系,k小于maxX,那么计算各元素的位置就是 位i,最终的新位置是 newLoc = i + k; 当 k > maxX,那么多出来的转动次数leftX = k - maxX 那么相当于从头开始排新位置,则新的位置newLoc = leftX - 1; 最后记住新位置和数然后放到原数组上。