Array Reversal Techniques in DSA Javascript - Time & Space Complexity
We want to understand how the time to reverse an array changes as the array gets bigger.
How many steps does it take to flip the order of items?
Analyze the time complexity of the following code snippet.
const reverseArray = (arr) => {
let left = 0;
let right = arr.length - 1;
while (left < right) {
const temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
return arr;
};
This code reverses an array by swapping elements from the start and end moving towards the center.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Swapping two elements in the array.
- How many times: About half the length of the array (n/2) times.
As the array gets bigger, the number of swaps grows roughly in direct proportion to its size.
| Input Size (n) | Approx. Operations (Swaps) |
|---|---|
| 10 | 5 |
| 100 | 50 |
| 1000 | 500 |
Pattern observation: Doubling the array size roughly doubles the number of swaps needed.
Time Complexity: O(n)
This means the time to reverse grows linearly with the array size; bigger arrays take proportionally more time.
[X] Wrong: "Reversing an array takes constant time because we just swap elements."
[OK] Correct: Each swap is a step, and the number of swaps grows with the array size, so time grows too.
Understanding how simple loops affect time helps you explain and optimize code clearly in interviews.
"What if we used recursion to reverse the array? How would the time complexity change?"
Practice
reverse() method do to an array in JavaScript?Solution
Step 1: Understand the reverse() method
The reverse() method changes the original array by reversing the order of its elements.Step 2: Confirm the effect on the original array
It does not create a new array or sort; it simply reverses the existing array in place.Final Answer:
It reverses the order of elements in the original array. -> Option CQuick Check:
reverse() = reverses array order [OK]
- Thinking reverse() sorts the array
- Assuming reverse() creates a new array
- Confusing reverse() with removing duplicates
arr in JavaScript?Solution
Step 1: Identify the method call syntax
The reverse() method is called on the array object itself, so the syntax isarr.reverse();.Step 2: Check other options for errors
Options A, B, and C are incorrect because reverse is not a standalone function and does not take arguments.Final Answer:
arr.reverse(); -> Option AQuick Check:
Method called on array object = arr.reverse() [OK]
- Calling reverse as a standalone function
- Passing the array as an argument to reverse
- Assigning reverse() without calling on array
const arr = [1, 2, 3, 4]; const reversed = arr.reverse(); console.log(reversed);
Solution
Step 1: Understand reverse() return value
The reverse() method reverses the original array and returns the same reversed array.Step 2: Trace the code output
After calling arr.reverse(), arr becomes [4, 3, 2, 1], and reversed holds this reversed array. Logging reversed prints [4, 3, 2, 1].Final Answer:
[4, 3, 2, 1] -> Option DQuick Check:
reverse() returns reversed array [OK]
- Expecting original array unchanged
- Thinking reverse() returns undefined
- Confusing reverse() with sorting
nums:function reverseArray(nums) {
for(let i = 0; i < nums.length / 2; i++) {
let temp = nums[i];
nums[i] = nums[nums.length - i];
nums[nums.length - i] = temp;
}
return nums;
}Solution
Step 1: Check index calculations for swapping
The code uses nums.length - i as the index for the element to swap, but array indices go from 0 to nums.length - 1, so it should be nums.length - i - 1.Step 2: Confirm loop condition and swapping logic
The loop condition i < nums.length / 2 is acceptable, and temp is needed for swapping. Modifying the original array is allowed here.Final Answer:
The index nums.length - i is out of bounds; should be nums.length - i - 1. -> Option AQuick Check:
Array indices start at 0, so subtract 1 [OK]
- Using nums.length - i instead of nums.length - i - 1
- Removing temp variable causing swap errors
- Incorrect loop boundary causing extra swaps
arr, which code snippet correctly reverses the array without modifying the original array?Solution
Step 1: Understand how to avoid modifying original array
Using arr.slice() creates a shallow copy of the array. Calling reverse() on this copy reverses it without changing the original.Step 2: Analyze other options
const reversed = arr.reverse(); reverses the original array. const reversed = [...arr].sort().reverse(); sorts before reversing, changing order. const reversed = arr.reverse().map(x => x); reverses the original array because reverse() is called on arr before mapping.Final Answer:
const reversed = arr.slice().reverse(); -> Option BQuick Check:
Copy then reverse to keep original safe [OK]
- Using reverse() directly modifies original array
- Sorting before reversing changes order
- Thinking reverse().map(x => x) preserves original array
Ready to prove it?
Pass the test and this pattern moves unknown
