Sunday, January 30, 2022

Rotate An Array


package jan20;

public class RotateArray {

public static void main(String[] args) {

// Initialize array and rotation value
// Time: O(1), Space: O(1)
int[] arr = {2, 1, 6, 5, 4, 3};
int k = 4;
int len = arr.length;

// Adjust k if it's greater than length
// Time: O(1), Space: O(1)
k = k > len ? k % len : k;

// Adjust k if negative
// Time: O(1), Space: O(1)
k = k < 0 ? k + len : k;

// Reverse first part of array
// reverseArray is O(n) where n = len - k
reverseArray(arr, 0, len - k - 1);

// Reverse second part of array
// reverseArray is O(k)
reverseArray(arr, len - k, len - 1);

// Reverse whole array
// reverseArray is O(n)
reverseArray(arr, 0, len - 1);

// Print array
// printArray is O(n)
printArray(arr);
}

private static void reverseArray(int[] arr, int left, int right) {

// Reversing by swapping
// Time: O(right - left + 1), Space: O(1) (in-place)
while (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;

left++;
right--;
}
}

private static void printArray(int[] arr) {

// Loop through array
// Time: O(n), Space: O(1)
for (int i : arr)
System.out.print(i + " ");
}
}


Final Overall:

OperationTime ComplexitySpace Complexity
Rotate array (including 3 reversals)O(n)O(1)
Print arrayO(n)O(1)

🔥 Total: O(n) time and O(1) space! Very efficient because everything is done in-place!




CaseTime ComplexitySpace ComplexityExplanation
Best CaseO(n)O(1)Even if no actual rotation is needed (k = 0 or k = n), still needs 3 full array reversals.
Average CaseO(n)O(1)Typically for any k, we reverse parts and whole array → linear time.
Worst CaseO(n)O(1)When k is very large (e.g., much bigger than n) — we still normalize k and do 3 reversals on the array.

 

No comments:

Post a Comment

Diagonal Traversal

 eg.  1       2       3       4 5      6       7       8 9    10    11     12 13  14   15    16 Output: 1 6 11 16 2 7 12 3 8 4  Approach:...