@Test publicvoidtestRotate(){ int[] arrays = {1}; rotate(arrays, 3); for (int i = 0; i < arrays.length; i++) { System.out.print(arrays[i]); } }
publicstaticvoidrotate(int[] arrays, int k){ if (0 >= k) { return; } for (int i = 0; i < k; i++) { int last = arrays[arrays.length - 1]; int first = arrays[0]; for (int j = 1; j < arrays.length; j++) { last = arrays[j]; arrays[j] = first; first = last; } arrays[0] = last; }
/** * (k+i)%n 计算出新的位置 */ publicvoidrotate(int[] nums, int k){ k = k % nums.length; if(k ==0 || nums.length == 1) return; int N=nums.length; int n=0; int i=0; int times=0; int cur=nums[0]; // n==N out while(n<N){ // 计算的i 可能和之前的冲突,移到下一个i,再计算 i=(k+i)%N; int t = nums[i]; nums[i] = cur; if(i==times){ times++; i++; cur = nums[i]; }else{ cur = t; } n++; } }