中软面试 算法

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

你可能感兴趣的:(算法)