189. Rotate Array

#two-pointers #math

Problem

Intuition

Time Complexity

Space Complexity

Solution

class Solution {
    public void rotate(int[] nums, int k) {
        // n -> nums.length, number of elements in nums
        // Time Complexity: O(n)
        // For reversing, and reversing the parts based on pivot = 2 * O(n) = O(n)

        // Space Complexity: O(1)

        // Reverse the full original array
        reverse(nums, 0, nums.length-1);

        k = k % nums.length; // Using mod to handle arraysout of bounds exception
        
        // Find pivot
        int pivot = k - 1;

        // Reverse the first part
        reverse(nums, 0, pivot);

        // Reverse the second part
        reverse(nums, pivot+1, nums.length-1);
    }

    private void reverse(int[] nums, int start, int end) {
        while(start < end) {
            swap(nums, start, end);
            start++;
            end--;
        }
    }

    private void swap(int[] nums, int idx1, int idx2) {
        int temp = nums[idx1];
        nums[idx1] = nums[idx2];
        nums[idx2] = temp;
    }
}

Last updated

Was this helpful?