class Solution {
public void rotate(int[] nums, int k) {
int n = nums.length;
k = k % n;
reverse(nums, 0, n - k - 1); // reverse first part
reverse(nums, n - k, n - 1); // reverse second part
reverse(nums, 0, n - 1); // reverse the whole array
}
private void reverse(int[] nums, int i, int j) {
if (i < 0 || i >= j) return;
while (i < j) {
int t = nums[i];
nums[i] = nums[j];
nums[j] = t;
i++;
j--;
}
}
}
class Solution:
def rotate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: void Do not return anything, modify nums in-place instead.
"""
def rotate(left, right):
if left >= right:
return
while left < right:
t = nums[left]
nums[left] = nums[right]
nums[right] = t
left += 1
right -= 1
k = k % len(nums)
rotate(0, len(nums) - k - 1)
rotate(len(nums) - k, len(nums) - 1)
rotate(0, len(nums) - 1)
class Solution {
public:
void rotate(vector<int>& nums, int k) {
k %= nums.size();
reverse(nums.begin(), nums.begin() + nums.size() - k);
reverse(nums.begin() + nums.size() - k, nums.end());
reverse(nums.begin(), nums.end());
}
};