Array Rotation Techniques in DSA Typescript - 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 changes as the array grows larger.
Analyze the time complexity of the following code snippet.
function rotateArray(arr: number[], k: number): number[] {
const n = arr.length;
k = k % n;
const rotated = arr.slice(n - k).concat(arr.slice(0, n - k));
return rotated;
}
This code rotates the array to the right by k steps using slicing and concatenation.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Creating two slices of the array and then joining them.
- How many times: Each slice goes through part of the array once, so together they cover all elements once.
As the array size grows, the number of elements we copy grows too.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 element copies |
| 100 | About 100 element copies |
| 1000 | About 1000 element copies |
Pattern observation: The work grows directly with the number of elements, so doubling the array size roughly doubles the work.
Time Complexity: O(n)
This means the time to rotate grows in a straight line with the array size.
[X] Wrong: "Rotating an array by k steps always takes constant time because k is fixed."
[OK] Correct: Even if k is fixed, the code copies parts of the array proportional to its size, so time grows with the array length.
Knowing how array rotation works and its time cost helps you explain your choices clearly and shows you understand how data moves in memory.
"What if we rotated the array in place without creating a new array? How would the time complexity change?"
Practice
Example: [1, 2, 3, 4] rotated right by 1 becomes?Solution
Step 1: Understand right rotation
Right rotation by 1 means the last element moves to the front, shifting others right.Step 2: Apply to example array
Last element 4 moves to front, rest shift right: [4, 1, 2, 3].Final Answer:
[4, 1, 2, 3] -> Option AQuick Check:
Right rotate by 1 = last element front [OK]
- Confusing right rotation with left rotation
- Not moving the last element to front
- Shifting elements incorrectly
arr to the left by 1 position?Solution
Step 1: Understand left rotation by 1
Left rotation by 1 means first element moves to the end.Step 2: Check code snippets
arr.push(arr.shift()!) uses arr.shift() to remove first element and arr.push() to add it at end, correct for left rotation.Final Answer:
arr.push(arr.shift()!) -> Option AQuick Check:
Left rotate = shift then push [OK]
- Using pop instead of shift for left rotation
- Using unshift with pop for left rotation
- Calling shift or pop twice incorrectly
const arr = [10, 20, 30, 40, 50]; const k = 2; const rotated = arr.slice(-k).concat(arr.slice(0, arr.length - k)); console.log(rotated);
Solution
Step 1: Understand slicing for rotation
arr.slice(-k) takes last 2 elements: [40, 50]. arr.slice(0, arr.length - k) takes first 3 elements: [10, 20, 30].Step 2: Concatenate slices
Concatenating gives [40, 50, 10, 20, 30], which is right rotation by 2.Final Answer:
[40, 50, 10, 20, 30] -> Option BQuick Check:
Right rotate by 2 = last 2 front [OK]
- Using slice with wrong indices
- Confusing left and right rotation
- Not concatenating slices in correct order
k positions:function rotateLeft(arr: number[], k: number): number[] {
for (let i = 0; i < k; i++) {
arr.push(arr.shift());
}
return arr;
}Solution
Step 1: Check arr.shift() return type
arr.shift() returns element or undefined if array empty. Here, no check for undefined.Step 2: Effect on arr.push()
If arr.shift() returns undefined, arr.push(undefined) adds undefined to array, causing incorrect result or runtime issues.Final Answer:
arr.shift() can return undefined, causing push(undefined) -> Option CQuick Check:
shift may be undefined, must check [OK]
- Ignoring undefined from shift()
- Wrong loop range assumptions
- Confusing push and unshift methods
arr of length n, how can you rotate it to the left by k positions efficiently without using extra space? Choose the correct approach.Solution
Step 1: Understand in-place rotation using reversal
Reversing parts of array and then whole array rotates left by k without extra space.Step 2: Apply reversal steps
Reverse first k elements, reverse last n-k elements, then reverse entire array to get rotated array.Final Answer:
Reverse first k, reverse last n-k, reverse whole array -> Option DQuick Check:
Reversal method = in-place left rotate [OK]
- Using extra array when not needed
- Rotating one by one causing O(n*k) time
- Sorting array unrelated to rotation
Ready to prove it?
Pass the test and this pattern moves unknown
