微软的22道数据结构算法面试题

来源:微软认证    发布时间:2012-11-08    微软认证视频    评论

  11、汉诺塔问题。

  1void   tower(n,x,y,z){

  2         if(n==1)   move(x,z);

  3         else   {

  4                 tower(n-1,   x,z,y);

  5                 move(x,z);

  6                 tower(n-1,   y,x,z);

  7         }

  8}

  12、三柱汉诺塔最小步数。

  1       int     f3(n)     {

  2             if   (f3[n])     return     f3[n];

  3               else         {

  4                       if   (n   ==   1   )     {

  5                           f3[n]   =   1   ;

  6                             return       1   ;

  7                   }

  8                   f3[n]   =   2   *   f3(n   -   1   )   +   1   ;

  9                     return     f3[n];

  10           }

  11   }

  四柱汉诺塔最小步数。

  1int   f4(n){

  2         if(f4[n]==0){

  3                 if(n==1)   {

  4                         f4[1]==1;

  5                         return   1;

  6                 }

  7                 min=2*f4(1)+f3(n-1);

  8                 for(int   i=2;i<n;++i){

  9                         u=2*f4(i)+f3(n-i);

  10                         if(u<min)   min=u;

  11                 }

  12                 f4[n]=min;

  13                 return   min;

  14         }   else   return   f4[n];

  15}

  13、在一个链表中删除另一个链表中的元素。

  1void   delete(List   m,   List   n)   {

  2         if(!m   ||   !n)   return;

  3         List   pre   =   new   List();

  4         pre.next=m;

  5         List   a=m,   b=n,head=pre;

  6         while(a   &&   b){

  7                 if(a.value   <   b.value)   {

  8                         a=a.next;

  9                         pre=pre.next;

  10                 }else   if(a.value   >   b.value){

  11                         b=b.next;

  12                 }else{

  13                         a=a.next;

  14                         pre.next=a;

  15                 }

  16         }

  17         m=head.next;

  18}

  14、一个数组,下标从0到n,元素为从0到n的整数。判断其中是否有重复元素。

  1int   hasDuplicate(int[]   a,   int   n){

  2         for(int   i=0;i<n;++i){

  3                 while(a[i]!=i   &&   a[i]!=-1){

  4                         if(a[a[i]]==-1)   return   1;

  5                         a[i]=a[a[i]];

  6                         a[a[i]]=-1;

  7                 }

  8                 if(a[i]==i)   {a[i]=-1;}

  9         }

  10         return   0;

  11}

  15、判断一颗二叉树是否平衡。

  1int   isB(Tree   t){

  2         if(!t)   return   0;

  3         int   left=isB(t.left);

  4         int   right=isB(t.right);

  5         if(   left   >=0   &&   right   >=0   &&   left   -   right   <=   1   ||   left   -right   >=-1)

  6                 return   (left<right)?   (right   +1)   :   (left   +   1);

  7         else   return   -1;

  8}

  9

  16、返回一颗二叉树的深度。

  1int   depth(Tree   t){

  2         if(!t)   return   0;

  3         else   {

  4                 int   a=depth(t.right);

  5                 int   b=depth(t.left);

  6                 return   (a>b)?(a+1):(b+1);

  7         }

  8}

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答