Find Median of two given Vectors
Last Updated :
24 Mar, 2023
Given two vectors, a and b of different sizes, where array a has m number of elements and array b has n number of elements. The task is to find the median of two vectors. This problem is an extension of the Median of two sorted arrays of different sizes problem.
Example:
Input: a = {1, 4}
b = {2}
Output: The median is 2.
Explanation:
The merged vector = {1, 2, 4}
So, the median is 2.
Input: a = {1, 2}
b = {3, 5}
Output: The median is 2.50000
Explanation:
The merged vector = {1, 2, 3, 5}
So, the median is (2 + 3) / 2 = 2.5.
Approach:
- Initialize vector a.
- Initialize vector b.
- Create a new vector of size a + b.
- Iterate using a loop the first vector and store the data into a newly created vector and similarly for the second vector after iterating the first vector.
- Merged both sorted vectors in the newly created vector by using the merge() STL function.
- Find the median for even and odd sizes and return it.
Below is the C++ implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
double findMedianSortedVectors(vector< int >& a,
vector< int >& b)
{
vector< int > c(a.size() + b.size());
int k = 0;
double median = 0;
int size_a = a.size();
int size_b = b.size();
for ( int i = 0; i < size_a; i++)
{
c[k++] = a[i];
}
for ( int i = 0; i < size_b; i++)
{
c[k++] = b[i];
}
merge(a.begin(), a.end(),
b.begin(), b.end(), c.begin());
int n = c.size();
if (n % 2 == 0)
{
median = c[(n / 2) - 1] + c[n / 2];
median = median / 2;
}
else
{
median = c[(n - 1) / 2];
}
return median;
}
int main()
{
vector< int > v1;
vector< int > v2;
v1.push_back(1);
v1.push_back(4);
v2.push_back(2);
double median_vectors =
findMedianSortedVectors(v1, v2);
cout << median_vectors << endl;
return 0;
}
|
Java
import java.io.*;
import java.util.Collections;
import java.util.Vector;
class GFG {
public static double
findMedianSortedVectors(Vector<Integer> a,
Vector<Integer> b)
{
Vector<Integer> c = new Vector<Integer>();
double median = 0 ;
int size_a = a.size();
int size_b = b.size();
for ( int i = 0 ; i < size_a; i++) {
c.add(a.get(i));
}
for ( int i = 0 ; i < size_b; i++) {
c.add(b.get(i));
}
Collections.sort(c);
int n = c.size();
if (n % 2 == 0 ) {
median = c.get((n / 2 ) - 1 ) + c.get(n / 2 );
median = median / 2 ;
}
else {
median = c.get((n - 1 ) / 2 );
}
return median;
}
public static void main(String[] args)
{
Vector<Integer> v1 = new Vector<Integer>();
Vector<Integer> v2 = new Vector<Integer>();
v1.add( 1 );
v1.add( 4 );
v2.add( 2 );
double median_vectors
= findMedianSortedVectors(v1, v2);
System.out.println(median_vectors);
}
}
|
Python3
def findMedianSortedVectors(a, b):
c = []
for i in range ( 0 , len (a)):
c.append( 0 )
for i in range ( 0 , len (b)):
c.append( 0 )
k = 0
median = 0
size_a = len (a)
size_b = len (b)
for i in range ( 0 , size_a):
c[k] = a[i]
k + = 1
for i in range ( 0 , size_b):
c[k] = b[i]
k + = 1
c.sort()
n = len (c)
if (n % 2 = = 0 ):
median = c[(n / / 2 ) - 1 ] + c[n / / 2 ]
median = median / 2
else :
median = c[(n - 1 ) / / 2 ]
return median
v1 = [ 1 , 4 ]
v2 = [ 2 ]
median_lists = findMedianSortedVectors(v1, v2)
print (median_lists)
|
C#
using System;
using System.Collections;
using System.Collections.Generic;
class GFG
{
public static double
findMedianSortedVectors(ArrayList a,
ArrayList b)
{
ArrayList c = new ArrayList();
double median = 0;
int size_a = a.Count;
int size_b = b.Count;
for ( int i = 0; i < size_a; i++) {
c.Add(a[i]);
}
for ( int i = 0; i < size_b; i++) {
c.Add(b[i]);
}
c.Sort();
int n = c.Count;
if (n % 2 == 0) {
median = ( int )c[(n / 2) - 1] + ( int )c[n / 2];
median = median / 2;
}
else {
median = ( int )c[(n - 1) / 2];
}
return median;
}
public static void Main()
{
ArrayList v1 = new ArrayList();
ArrayList v2 = new ArrayList();
v1.Add(1);
v1.Add(4);
v2.Add(2);
double median_vectors
= findMedianSortedVectors(v1, v2);
Console.WriteLine(median_vectors);
}
}
|
Javascript
<script>
function findMedianSortedVectors(a, b)
{
let c = new Array(a.length + b.length);
let k = 0;
let median = 0;
let size_a = a.length;
let size_b = b.length;
for (let i = 0; i < size_a; i++)
{
c[k++] = a[i];
}
for (let i = 0; i < size_b; i++)
{
c[k++] = b[i];
}
c.sort( function (a, b) { return a - b })
let n = c.length;
if (n % 2 == 0)
{
median = c[(Math.floor(n / 2) - 1)] + c[(Math.floor(n / 2))];
median = Math.floor(median / 2);
}
else
{
median = c[(Math.floor((n - 1) / 2))];
}
return median;
}
let v1 = [];
let v2 = [];
v1.push(1);
v1.push(4);
v2.push(2);
let median_vectors =
findMedianSortedVectors(v1, v2);
document.write(median_vectors + '<br>' );
</script>
|
Complexity:
Time Complexity: O(m + n) as to merge both the vectors O(m+n) time is needed.
Space Complexity: O(1) as no extra space is required.
Share your thoughts in the comments
Please Login to comment...