Array Reversal Techniques in DSA C++ - Time & Space Complexity
We want to understand how long it takes to reverse an array as the array gets bigger.
How does the work grow when the array size increases?
Analyze the time complexity of the following code snippet.
void reverseArray(int arr[], int n) {
int start = 0, end = n - 1;
while (start < end) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
This code reverses the elements of an array by swapping pairs from the ends moving towards the center.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Swapping two elements in the array.
- How many times: Approximately n/2 times, where n is the array size.
As the array size grows, the number of swaps grows roughly half as fast.
| Input Size (n) | Approx. Operations (Swaps) |
|---|---|
| 10 | 5 |
| 100 | 50 |
| 1000 | 500 |
Pattern observation: The operations grow linearly with input size, about half the size.
Time Complexity: O(n)
This means the time to reverse the array grows directly in proportion to the array size.
[X] Wrong: "Reversing an array takes constant time because we just swap a few elements."
[OK] Correct: We must swap pairs for about half the array length, so the work grows as the array gets bigger.
Understanding how array reversal scales helps you reason about loops and data manipulation, a key skill in many coding challenges.
"What if we used recursion instead of a loop to reverse the array? How would the time complexity change?"
Practice
Solution
Step 1: Understand the meaning of reversal
Reversing means flipping the order of elements so the last element comes first and the first element goes last.Step 2: Compare with other options
Sorting arranges elements by value, removing duplicates deletes repeated items, adding elements increases size. None of these change order like reversal.Final Answer:
Changing the order of elements so the last becomes first and first becomes last -> Option AQuick Check:
Reversal = Flip order [OK]
- Confusing reversal with sorting
- Thinking reversal removes elements
- Mixing reversal with adding elements
arr of size n using a for loop?Solution
Step 1: Analyze the correct reversal loop
The loop swaps elements from start and end moving towards the center, stopping at half the array size.Step 2: Check other options for errors
A does nothing, for(int i = 0; i < n; i++) { arr[i] = arr[n - i]; } accesses out-of-bound index (arr[n - i]), C shifts elements incorrectly.Final Answer:
for(int i = 0; i < n / 2; i++) { std::swap(arr[i], arr[n - i - 1]); } -> Option CQuick Check:
Swap pairs from ends to middle [OK]
- Accessing out-of-bound indices
- Not stopping loop at half the array
- Overwriting elements without swapping
int arr[] = {1, 2, 3, 4, 5};
int n = 5;
for(int i = 0; i < n / 2; i++) {
int temp = arr[i];
arr[i] = arr[n - i - 1];
arr[n - i - 1] = temp;
}
for(int i = 0; i < n; i++) {
std::cout << arr[i] << " ";
}Solution
Step 1: Trace the swapping loop
Swaps arr[0] with arr[4], arr[1] with arr[3]. After swaps, arr = {5,4,3,2,1}.Step 2: Print the array elements
The loop prints all elements in order: 5 4 3 2 1.Final Answer:
5 4 3 2 1 -> Option AQuick Check:
Reversed array prints 5 4 3 2 1 [OK]
- Not swapping correctly
- Loop running too many times
- Printing before reversal
arr of size n:for(int i = 0; i <= n / 2; i++) {
int temp = arr[i];
arr[i] = arr[n - i - 1];
arr[n - i - 1] = temp;
}Solution
Step 1: Analyze the loop condition
The loop runs while i <= n/2, which includes the middle element when n is odd.Step 2: Understand the effect of swapping middle element twice
Swapping the middle element with itself is unnecessary and can cause incorrect behavior or redundant operation.Final Answer:
The loop condition should be 'i < n / 2' to avoid swapping the middle element twice -> Option DQuick Check:
Loop must stop before middle index [OK]
- Using <= instead of < in loop condition
- Swapping wrong elements
- Starting loop from 1 instead of 0
m x n, which approach correctly reverses each row individually in C++?Solution
Step 1: Understand reversing each row
Reversing each row means flipping elements in that row only, not affecting other rows.Step 2: Identify correct method
Using two pointers per row to swap elements from start and end is the correct approach.Step 3: Check incorrect options
Swapping column-wise mixes rows, transposing changes structure, sorting changes order by value, not position.Final Answer:
Use a nested loop: for each row, swap elements from start to end using two pointers -> Option BQuick Check:
Reverse rows by swapping pairs inside each row [OK]
- Trying to reverse columns instead of rows
- Using sorting instead of reversing
- Transposing matrix instead of reversing rows
Ready to prove it?
Pass the test and this pattern moves unknown
