1. 题目
2. 思路
(1) 双指针法
- 首先对整个数组进行旋转,然后分别对前m个元素的子数组和后n-m个元素的子数组进行旋转即可。
3. 代码
public class Test {
public static void main(String[] args) {
}
}
class Solution {
/**
* 旋转数组
*
* @param n int整型 数组长度
* @param m int整型 右移距离
* @param a int整型一维数组 给定数组
* @return int整型一维数组
*/
public int[] solve(int n, int m, int[] a) {
m %= n;
if (m == 0) {
return a;
}
swap(a, 0, n - 1);
swap(a, 0, m - 1);
swap(a, m, n - 1);
return a;
}
public void swap(int[] a, int left, int right) {
while (left < right) {
int temp = a[left];
a[left] = a[right];
a[right] = temp;
left++;
right--;
}
}
}