In this series of posts, I will discuss coding questions on the Arrays
Data structure.
The posts in this series will be organized in the following way,
- Question Link โ
- Possible Explanation ๐
- Documented C++ Code ๐งน
- Time and Space Complexity Analysis โ๐
The Question
๐ก Give yourself at least 15-20 mins to figure out the solution :)
Explanation
The idea is to maintain two index variables start
and end
, initially pointing to the first element and last element of the array respectively.
And then, we will swap values in the following order: (first, last) โ (second, second-last) โ (third, third, third-last) ....until we reach the middle element of the array.
Here's the pseudo-code,
while start < end:
swap(arr[start], arr[end])
start = start + 1 //move start ahead by one step
end = end - 1 //move end back by one step
๐ก If you are wondering why there's
<
instead ofโค
? It's becausestart
will be equal toend
only in the case of odd length arrays and they both will point to the middle element of the array. And it does no good to swap it with itself as the array is already reversed by then.
Still confused?
Assume index starts from zero.
Think what happens when
arr.length = 3
(odd), after one iteration,start
andend
both will point to index=1 and array is already reversed.Think what happens when
arr.length = 4
(even), after two iteration,start(2)
will be greater thanend(1)
and array will be reversed.
C++ Code
Solution
#include<iostream>
using namespace std;
void reverse(int* arr, int start, int end){
//untill we reach the middle
while(start < end){
//swap arr[start] and arr[end]
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;//move start ahead
end--;//move end back
}
}
//driver code
int main(){
int n;
cin>>n;
int arr[n];
for(int i=0; i<n; i++){
cin>>arr[i];
}
reverse(arr, 0, n-1);
for(auto val: arr){
cout<<val<<"\n";
}
return 0;
}
Complexity Analysis
N
: length of the array
Time Complexity: O(N)
Since we are iterating nearly N/2 times, thus time will be O(N/2) = O(N).
Space Complexity: O(1)
We didn't use any extra space.
Top comments (0)