《面试必刷TOP101》模拟篇
BM97 旋转数组
很容易想到三次反转即可满足题目的要求
唯一需要注意的就是m
需要取模,因为当移动的次数大于数组的长度时候,其实就相当于向右移动了m%n
次。
public int[] solve (int n, int m, int[] a) {
m = m%n;
// 0 - n
reverse(a,0,n-1);
// 0 - m
reverse(a,0,m-1);
// m - n
return reverse(a,m,n-1);
}
private int[] reverse(int[] a,int start,int end){
while(start < end){
int tmp = a[start];
a[start] = a[end];
a[end] = tmp;
start++;
end--;
}
return a;
}