原题链接:https://leetcode.cn/problems/rotate-array/ 
题解
方法1:
写一个循环右移索引的函数,让pos不断右移k位,每次移位和begin交换位置,直到pos回归到begin为止
这种情况会有遍历不完全的情况,设置一个cnt记录操作的元素数量,当cnt没有达到数组长度时begin++并再次循环交换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
   | class Solution {     public void rotate(int[] nums, int k) {         int begin=0,pos=0,cnt=0;         pos=cycleIndex(nums,begin,k);
          while(cnt<nums.length){             while(begin!=pos){                 swap(nums,begin,pos);                 pos=cycleIndex(nums,pos,k);                 cnt++;             }             cnt++;             begin++;             pos=cycleIndex(nums,begin,k);         }     }     void swap(int[] nums,int a,int b){         int temp;         temp=nums[a];         nums[a]=nums[b];         nums[b]=temp;     }     int cycleIndex(int[] nums,int pos,int range){         int ret=pos+range;         while(ret>nums.length-1){             ret=ret-(nums.length);         }         return ret;     } }
  | 
 
方法2:
建立一个新数组,把原数组索引i的元素放在新数组i+k(经过循环右移)的位置上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
   | class Solution {     public void rotate(int[] nums, int k) {         int[] ans=nums.clone();
          for(int i=0;i<nums.length;i++){             nums[cycleIndex(nums,i,k)]=ans[i];         }     }
      int cycleIndex(int[] nums,int pos,int range){         int ret=pos+range;         while(ret>nums.length-1){             ret=ret-(nums.length);         }         return ret;     } }
  |