189 轮转数组 
给定一个整数数组   nums ,将数组中的元素向右轮转   k   个位置,其中   k   是非负数。
示例 1:
输入: 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]
示例 2:
** 输入:**nums = [-1,-100,3,99], k = 2 输出:[3,99,-1,-100] 解释: 向右轮转 1 步: [99,-1,-100,3] 向右轮转 2 步: [3,99,-1,-100]
答案
对数组的轮转相当于 1、对数组整个翻转 2、对 k 之前翻转 3、对 k 之后翻转
注意本题没有保证 k 小于数组长度 n。由于轮转 n 次等于没有轮转,轮转 n+1 等于轮转 1 次,依此类推,轮转 k 次等于轮转 kmodn 次。
js
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var rotate = function (nums, k) {
  function reverse(i, j) {
    while (i < j) {
      [nums[i], nums[j]] = [nums[j], nums[i]];
      i++;
      j--;
    }
  }
  const n = nums.length;
  k %= n; // 轮转 k 次等于轮转 k%n 次
  reverse(0, n - 1);
  reverse(0, k - 1);
  reverse(k, n - 1);
};1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20