双指针
先整体反转,再分别反转前 k 个和后 n-k 个元素,即可完成循环右移。三次反转都是原地操作。
时间复杂度
空间复杂度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Solution { public void rotate(int[] nums, int k) { k %= nums.length; reverse(nums, 0, nums.length - 1); reverse(nums, 0, k - 1); reverse(nums, k, nums.length - 1); } private void reverse(int[] nums, int start, int end) { while (start < end) { int tmp = nums[start]; nums[start] = nums[end]; nums[end] = tmp; start++; end--; } } }
|