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?