You are given two lists/arrays ‘ARR1’ and ‘ARR2’ consisting of ‘N’ and ‘M’ integers respectively.
Your task is to traverse both ‘ARR1’ and ‘ARR2’ together in Zigzag order and return a list/array representing their Zigzag traversal.
In ZigZag traversal, we iterate the arrays/list alternatively starting with ‘ARR1’ i.e. in order ARR1[0], ARR2[0], ARR1[1], ARR2[1], ARR1[2], ARR2[2] and so on. See the example for more clarity.
Example:Consider ARR1 = [1, 2] and ARR2 = [3, 4, 5, 6], then their Zigzag traversal will be represented by the list/array [1, 3, 2, 4, 5, 6].
We traverse in order ARR1[0], ARR2[0], ARR1[1], ARR2[1], ARR2[2], ARR2[3]. Note, ARR1 is completely traversed at the 3rd position, and after which we simply iterate over ‘ARR2’.
The first line of input contains an integer ‘T’ denoting the number of test cases. then ‘T’ test cases follow.
The first line of each test case consists of two single space-separated integers ‘N’ and ‘M’ representing the number of integers in ‘ARR1’ and ‘ARR2’ respectively.
The second line of each test case consists of ‘N’ single space-separated integers representing array ‘ARR1’
The third line of each test case consists of ‘M’ single space-separated integers representing array ‘ARR2’
Output format :
For each test case, return an array of size ‘N’ + ‘M’ that contains integers representing Zigzag traversal of ‘ARR1’ and ‘ARR2’.
Note:
You do not need to print anything, it has already been taken care of. Just implement the given function.
1 <= T <= 50
0 <= N <= 10^4
0 <= M <= 10^4
0 <= ARR1[i] <= 10^9
0 <= ARR2[i] <= 10^9
N + M > 0
Time limit: 1 sec
2
1 0
1
2 4
1 2
3 4 5 6
1
1 3 2 4 5 6
Test case 1:
Here ’ARR2’ is empty, and ‘ARR1’ has a single integer 1. Thus their Zigzag traversal is also 1.
Test case 2:
See the problem statement for an explanation.
2
3 3
1 1 1
2 2 2
5 2
1 2 3 2 1
9 1
1 2 1 2 1 2
1 9 2 1 3 2 1
Initially keep one pointer at index 0 of ‘ARR1’ and another at index 0 of ‘ARR2’ and then move them alternately.
This approach is straightforward, we will keep two pointers ‘p’ and ‘q’. Initially we keep both pointers at the 0th index i.e ‘p’ = 0 and ‘q’ = 0. After that we simply run a loop where ‘i’ ranges from 0 to ‘N’ + ’M’ - 1, and if ‘i’ is even then we visit ‘ARR1[p]’ and increment ‘p’ by ‘1’ otherwise we visit ‘ARR2[q]’ and increment ‘q’ by 1. Step by step algorithm is described below -:
Algorithm:
O(N + M), where ‘N’ and ‘M’ represent the number of integers in ‘ARR1’ and ‘ARR2’ respectively.
Here we are running a single for loop from 0 to N + M, and in each iteration, the operation we perform takes constant times. Thus overall complexity will be O(N + M).
O(1).
We are only using constant extra space here.