a = [1,2,3,4]
b= [7,8,9,10]
c= merge a and b = [1,2,3,4,7,8,9,10]
2. Implementation
Q1:void => in-place
A1:assume one array size is large enough to accommdate the others.
Q1:hard to insert element into existing array ?
A1:start merging from the last element, backward iterating
num1[m-1]
num2[n-1]
num1[m+n-1]
Q1: one is larger than the other
A1: while to prepend the rest
// NOTE: the reason giving m and n is m is available size and in fact num1's size is larger than m
// NOTE :snippet
int indexNum1 = m-1;
int indexNum2 = n-1;
int indexTotal = m+n-1;
while( indexNum2 >=0 )
(E) Merge two sorted lists
// Time:O(m+n), Space:O(1)
public void (int[] num1, int m, int[] num2, int n)
{
// valid the input
//if (num1== null || m == 0)
//{
// return num2;
//}
//if (num2==null || n == 0 )
//{
//return num1;
// return;// void
//}
if ( num1 == null || num2 == null )
{
return;
}
// NOTE: the reason giving m and n is m is available size and in fact num1's size is larger than m
int indexNum1 = m-1;
int indexNum2 = n-1;
int indexTotal = m+n-1;
//while ( m >=0 && n>=0)
while (indexNum1 >= 0 && indexNum2 >= 0)
{
if (num1[indexNum1] > num2[indexNum2] )
{
num1[indexTotal--] = num1[indexNum1--];
}
else
{
num1[indexTotal--] = num2[indexNum2--];
}
}
while( indexNum2 >=0 )
{
num1[indexTotal--] = num2[indexNum2--];
}
while (indexNum1 >= 0)
{
num1[indexTotal--] = num1[indexNum1--];
}
}
3. Similar Ones(E) Merge two sorted lists
No comments:
Post a Comment