中软面试第二轮,被推到微软面试,这个题目:
/* 输入:两个有序数组
* 输入:合并后的排序数组
*/
* 输入:合并后的排序数组
*/
当时一片空白了。我写了一个,人家说效率低下,事后写的方法,以防忘记
// 将小的值加到result,并将该数组下标+1,
// 如果相等,则将其任意一个加到result,两数组下标均+1
// 如果下标超出该数组长度,则退出循环
// 如果相等,则将其任意一个加到result,两数组下标均+1
// 如果下标超出该数组长度,则退出循环
static List<int> MergeArray(int[] a,int[] b)
{
int idxa = 0;
int idxb = 0;
List<int> result = new List<int>();
while(true)
{
if(idxa >a.Length -1 || idxb > b.Length -1)
{
break;
}
if(a[idxa] < b[idxb])
{
result.Add(a[idxa]);
idxa++;
}
else if(a[idxa] > b[idxb])
{
result.Add(b[idxb]);
idxb++;
}
else
{
result.Add(a[idxa]);
idxa++;
idxb++;
}
}
if(idxa >= a.Length -1)
{
for (int i = idxa; i < a.Length - 1; i++)
{
result.Add(a[i]);
}
}
if(idxb >= b.Length - 1)
{
for (int i = idxb; i < b.Length; i++)
{
result.Add(b[i]);
}
}
return result;
}
{
int idxa = 0;
int idxb = 0;
List<int> result = new List<int>();
while(true)
{
if(idxa >a.Length -1 || idxb > b.Length -1)
{
break;
}
if(a[idxa] < b[idxb])
{
result.Add(a[idxa]);
idxa++;
}
else if(a[idxa] > b[idxb])
{
result.Add(b[idxb]);
idxb++;
}
else
{
result.Add(a[idxa]);
idxa++;
idxb++;
}
}
if(idxa >= a.Length -1)
{
for (int i = idxa; i < a.Length - 1; i++)
{
result.Add(a[i]);
}
}
if(idxb >= b.Length - 1)
{
for (int i = idxb; i < b.Length; i++)
{
result.Add(b[i]);
}
}
return result;
}