文章目录
循环左移右移数组
要求:
循环左移n位,把数组的前n个放到后面,如123456-》345612
思路:
1 反转前n个数
2 反转剩下的length-n个数
3 反转整个数组
代码:
//循环左移k位
public static void moveL(int[] arr,int k){
int n=arr.length;
k=k%n;
reverse(arr,0,k-1);//逆序前k个数
reverse(arr,k,n-1);//逆序倒数剩下的数
reverse(arr,0,n-1);//全部逆序
}
//循环右移k位
public static void moveR(int[] arr,int k){
int n=arr.length;
k=k%n;
reverse(arr,n-k,n-1);//逆序后k个数
reverse(arr,0,n-k-1);//逆序剩下的数
reverse(arr,0,n-1);//全部逆序
}
public static void reverse(int[] arr,int l,int r){
while(l<r){
int temp=arr[l];
arr[l]=arr[r];
arr[r]=temp;
l++;
r--;
}
}