Reverse the whole array, then reverse the first k elements, and finally reverse the remaining n - k elements in-place.
class Solution:
def rotate(self, nums: list[int], k: int) -> None:
k = k % len(nums)
def reverse(l, r):
while l < r:
nums[l], nums[r] = nums[r], nums[l]
l, r = l + 1, r - 1
reverse(0, len(nums) - 1)
reverse(0, k - 1)
reverse(k, len(nums) - 1)
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 l, int r) {
while (l < r) {
int temp = nums[l];
nums[l++] = nums[r];
nums[r--] = temp;
}
}
}