中软面试 算法

中软面试第二轮,被推到微软面试,这个题目:
    /* 输入:两个有序数组  
     * 输入:合并后的排序数组 
     */ 
当时一片空白了。我写了一个,人家说效率低下,事后写的方法,以防忘记
 
        // 将小的值加到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;
        }
原文地址:https://www.cnblogs.com/kakaliush/p/2059084.html