向右轮转 k 个位置
可以通过三次翻转实现:
- 翻转整个数组。
- 翻转前 k mod n 个元素。
- 翻转剩余的 n-k mod n 个元素。
向左轮转 k 个位置
同样可以通过三次翻转实现:
- 翻转整个数组。
- 翻转前 n-k mod n个元素。
- 翻转剩余的 k mod n 个元素。
值得注意的是向右或向左旋转在某种意义上是等效的,可以用一个滑轮条带来模拟,从上面转到下面算一次翻转。
轮转也可以通过取模的操作得到
如何翻转一个数组?
使用两个指针交换前后元素
public void reverse(int[] nums, int start, int end) {
while (start < end) {
int temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start++;
end--;
}
}