Thinking process I - extra array

O(n) + O(k) space

public class Solution {
    public void rotate(int[] nums, int k) {
        if (nums.length == 0 || k == 0) return;
        if (k > nums.length) k %= nums.length;

        int[] shiftedElements = new int[k];

        for (int i = 0; i < shiftedElements.length; ++i) {
            shiftedElements[i] = nums[nums.length - i - 1];
        }

        for (int i = 0; i < nums.length - k; ++i) {
            nums[nums.length - i - 1] = nums[nums.length - i - k - 1];
        }

        for (int i = 0; i < shiftedElements.length; ++i) {
            nums[i] = shiftedElements[shiftedElements.length - i - 1];
        }

    }
}

Thinking process II - reversal

O(n) + 1 extra space

Mistakes

don't forget to check whether k is larger than input array' length

public class Solution {
    public void rotate(int[] nums, int k) {
        if (nums.length == 0 || k == 0) return;
        if (k > nums.length) 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--;
        }
    }
}

results matching ""

    No results matching ""