Amazon Interview Question
Software Engineer / Developersvar arrayB = new int[] { 1, 3, 5, 7, 10 };
var arrayA = new int[] { 0, 1, 2, 6, 8, 12, 13, 14,15 };
var finalArray = new int[arrayA.Length + arrayB.Length];
int indexA = 0;
int indexB = 0;
int index = 0;
while(indexA < arrayA.Length)
{
while(indexB < arrayB.Length)
{
int elementA = arrayA[indexA];
int elementB = arrayB[indexB];
if(elementA <= elementB)
{
finalArray[index] = elementA;
index++;
indexA++;
break;
}else
{
finalArray[index] = elementB;
index++;
indexB++;
continue;
}
}
if(indexB == arrayB.Length)
{
for(int i= indexA ;i< arrayA.Length; i++)
{
finalArray[index] = arrayA[i];
index++;
}
break;
}
}
This is a cleaned up version of answer 1.
public int[] merge(int[] a, int[] b) {
int i = 0;
int j = 0;
int index = 0;
int[] result = new int[a.length + b.length);
while (i < a.length && j < b.length) {
if (a[i] <= b[j]) {
result[index] = a[i];
i++;
} else {
result[index] = b[j];
j++;
}
index++;
}
//only one of the below for loops will execute, depending on if i or j exceeded
//the bounds of a or b (respectively)
for(; i < a.length; i++) {
result[index] = a[i];
index++;
}
for (; j < b.length; j++) {
result[index] = b[j];
index++;
}
return result;
}
public int[] mergeArray(int A[], int []B){
int []C =new int[A.length+B.length];
int indexA=0, indexB=0,indexC=0;
while(indexC <C.length){
if(indexA <A.length && A[indexA] <= B[indexB])
{
C[indexC]=A[indexA];
indexA++;
}
else if(indexB < B.length){
C[indexC]=B[indexB];
indexB++;
}
indexC++;
}
return C;
}
- Algorithmist June 13, 2011