输入: 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,2,3,4,5,6,7] 开始: [5,6,7,1,2,3,4] 结束:每个位置向后挪移了k的位置,使用取余即可
public class RevertArr {
public static void rotate(int[] nums, int k) {
// if(nums.length<k){
// return ;
// }
// int temp[] = new int[nums.length];
// for(int i=0;i<k;i++){
// temp[i] = nums[nums.length-k+i];
// }
// for(int i = k;i<nums.length;i++){
// temp[i] = nums[i-k];
// }
// for(int i=0;i<temp.length;i++){
// nums[i] = temp[i];
// }
// System.out.println(Arrays.toString(nums));
/**
* 注意,k可能远大于nums.length
*/
int n = nums.length;
int[] newArr = new int[n];
/**
* 旋转的时候,使用取余即可。
*/
for (int i = 0; i < n; ++i) {
newArr[(i + k) % n] = nums[i];
}
System.arraycopy(newArr, 0, nums, 0, n);
System.out.println(Arrays.toString(nums));
}
public static void main(String[] args) {
int arr[] = {7,1,2,3,4,5,6};
rotate(arr,3);
}
}