Array Rotation Techniques in DSA Java - Time & Space Complexity
When we rotate an array, we move elements around to new positions. Understanding how long this takes helps us choose the best method.
We want to know how the time needed grows as the array gets bigger.
Analyze the time complexity of the following code snippet.
public void rotateArray(int[] arr, int k) {
int n = arr.length;
k = k % n;
int[] temp = new int[k];
for (int i = 0; i < k; i++) {
temp[i] = arr[n - k + i];
}
for (int i = n - 1; i >= k; i--) {
arr[i] = arr[i - k];
}
for (int i = 0; i < k; i++) {
arr[i] = temp[i];
}
}
This code rotates the array to the right by k steps using a temporary array.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Three separate loops copying elements.
- How many times: Each loop runs roughly k or n times, where n is array size and k is rotation steps.
As the array size grows, the number of operations grows mostly with n, since k is at most n.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 30 (3 loops of 10 or less) |
| 100 | About 300 |
| 1000 | About 3000 |
Pattern observation: Operations grow roughly in a straight line with n.
Time Complexity: O(n)
This means the time to rotate grows directly with the size of the array.
[X] Wrong: "Rotating by k steps always takes k operations only."
[OK] Correct: Because shifting elements involves moving many items, often close to n, not just k.
Knowing how array rotation time grows helps you explain your choices clearly and shows you understand efficiency.
"What if we used the reversal method to rotate the array? How would the time complexity change?"
Practice
Example: [1, 2, 3, 4] rotated left by 1 becomes?Solution
Step 1: Understand left rotation
Left rotation by 1 means each element moves one step to the left, and the first element moves to the end.Step 2: Apply left rotation on example
For [1, 2, 3, 4], after left rotation by 1, it becomes [2, 3, 4, 1].Final Answer:
[2, 3, 4, 1] -> Option AQuick Check:
Left rotate by 1 moves first element to end [OK]
- Confusing left rotation with right rotation
- Not moving the first element to the end
- Shifting elements in the wrong direction
arr of length n to the right by 1 position?Solution
Step 1: Understand right rotation by 1
Right rotation by 1 moves each element one step right, last element moves to first position.Step 2: Check code correctness
int last = arr[n-1]; for(int i = n-1; i > 0; i--) arr[i] = arr[i-1]; arr[0] = last; saves last element, shifts elements right, then sets first element to saved last. This matches right rotation.Final Answer:
int last = arr[n-1]; for(int i = n-1; i > 0; i--) arr[i] = arr[i-1]; arr[0] = last; -> Option AQuick Check:
Right rotate shifts right, last to first [OK]
- Using left rotation logic for right rotation
- Incorrect loop direction causing overwrite
- Swapping only first and last elements
int[] arr = {10, 20, 30, 40, 50};
int d = 2;
for(int i = 0; i < d; i++) {
int temp = arr[0];
for(int j = 0; j < arr.length - 1; j++) {
arr[j] = arr[j+1];
}
arr[arr.length - 1] = temp;
}
System.out.println(java.util.Arrays.toString(arr));Solution
Step 1: Understand the loop rotates array left by 1, repeated d times
Each iteration moves first element to end, shifting left by 1. Loop runs twice (d=2).Step 2: Trace array after each rotation
After 1st rotation: [20, 30, 40, 50, 10]
After 2nd rotation: [30, 40, 50, 10, 20]Final Answer:
[30, 40, 50, 10, 20] -> Option BQuick Check:
Left rotate by 2 shifts first 2 elements to end [OK]
- Confusing left and right rotation
- Not repeating rotation d times
- Off-by-one errors in loops
arr of length n to the left by 1:int temp = arr[0];
for(int i = 0; i < n; i++) {
arr[i] = arr[i+1];
}
arr[n-1] = temp;Solution
Step 1: Analyze the loop range and array access
The loop runs from i=0 to i=n-1, but inside it accesses arr[i+1]. For i=n-1, arr[i+1] = arr[n], which is out of bounds.Step 2: Identify the cause of error
Accessing arr[n] causes ArrayIndexOutOfBoundsException. The loop should run only till i < n-1.Final Answer:
Loop runs out of bounds accessing arr[n] -> Option CQuick Check:
Array index must be within 0 to n-1 [OK]
- Looping till i < n instead of i < n-1
- Ignoring array length limits
- Misplacing temp assignment
arr = [5, 10, 15, 20, 25, 30], how can you rotate it to the right by 3 positions efficiently without using extra space?Solution
Step 1: Understand the reversal algorithm for rotation
To rotate right by d, reverse whole array, then reverse first d elements, then reverse remaining n-d elements.Step 2: Apply to example
Array: [5,10,15,20,25,30]
Reverse all: [30,25,20,15,10,5]
Reverse first 3: [20,25,30,15,10,5]
Reverse last 3: [20,25,30,5,10,15]Final Answer:
Reverse entire array, reverse first 3 elements, then reverse remaining elements -> Option DQuick Check:
Reversal method rotates array efficiently without extra space [OK]
- Using extra space instead of in-place reversal
- Shifting elements one by one inefficiently
- Incorrect order of reversals
Ready to prove it?
Pass the test and this pattern moves unknown
