- 第一次,全数组翻转,12345->54321
- 第二次,m位之前的数反转,假设m=3,那就是54321->34521
- 第三次,m位之后的数反转,34521->34512
m取值若超过数组长度,则需取模,如数组为12345,向右移动7位,那移动1位变为51234,移动2位变为45123...移动4位变为23451,移动5位变为12345,所以当右移长度是数组整数倍时,等于没移动
import java.util.*;
public class Solution {
/**
* 旋转数组
* @param n int整型 数组长度
* @param m int整型 右移距离
* @param a int整型一维数组 给定数组
* @return int整型一维数组
*/
public int[] solve (int n, int m, int[] a) {
// write code here
m=m%n;
reverse(a,0,n-1);
reverse(a,0,m-1);
reverse(a,m,n-1);
return a;
}
// 反转数组
public void reverse(int[] arr,int start,int end){
if(start>end)return;
if(end>arr.length)return;
for(int i=start,j=end;i<=j;i++,j--){
swap(arr,i,j);
}
}
public void swap(int[] arr,int i,int j){
int temp = arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}