LeetCodeの題解:189.回転配列、環状の交替、JavaScript、詳細な注釈

4529 ワード

ソースリンク:https://leetcode-cn.com/problems/rotate-array/
問題解決の考え方:
この解法は公式の題解と「回転配列」を参考にして元の位置を変えて、詳しい図解を示して、詳しい注釈を提供して、理解を助けます.
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var rotate = function (nums, k) {
     
  k = k % nums.length; // k        ,
  let count = 0; //       

  /*
   *      2   :
   * 1. count        , count          ,        。
   * 2. start          ,        ,  while     
   */
  for (let start = 0; count < nums.length; start++) {
     
    let currentMoveIndex = start; //            
    let currentMoveItem = nums[start]; //           

    do {
     
      //          ,           k   
      let nextMoveIndex = (currentMoveIndex + k) % nums.length;
      //           
      let temp = nums[nextMoveIndex];
      //             
      nums[nextMoveIndex] = currentMoveItem;
      // temp            
      currentMoveItem = temp;
      // nextMoveIndex           
      currentMoveIndex = nextMoveIndex;
      count++; //       
    } while (
      /*
       *       :
       * 1. nums.length k        1,   m。
       *          m while    ,start currentMoveIndex   。
       *            start,    。
       * 2. nums.length k       1,start currentMoveIndex    。
       *             currentMoveIndex=nums.length-1,
       *              。
       */
      start !== currentMoveIndex
    );
  }
};