先将整个数组反转,再将数组的前后两半(前 k 个数和后 k 个数)分别反转,就可以实现数组的旋转了。
三次反转(reverse)操作的过程如下图所示:
public void rotate(int[] nums, int k){
int N = nums.length;
reverse(nums, 0, N);
reverse(nums, 0, k);
reverse(nums, k, N);
};
void reverse(int[] nums, int begin, int end){
for (int i = begin, j = end - 1; i < j; i++, j--){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}