E-189. Rotate Array
// 0 神奇的reverse 3次的解法, 先reverse整体, 再reverse 0到k, 再reverse剩下的:
// O(n), O(1)
public 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);
}
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--;
}
}
}
# 1 自己写的平淡无奇的解法: O(n), O(k)
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
temp = []
k = k % len(nums)
temp = nums[-k:]
for i in range(len(nums)-k-1, -1, -1):
nums[i+k]=nums[i]
for j in range(len(temp)):
nums[j] = temp[j]
Last updated
Was this helpful?