微软面试100题系列

微软面试100题系列

ID:18108258

大小:67.24 KB

页数:82页

时间:2018-09-13

微软面试100题系列_第1页
微软面试100题系列_第2页
微软面试100题系列_第3页
微软面试100题系列_第4页
微软面试100题系列_第5页
资源描述:

《微软面试100题系列》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、微软面试100题系列  1.把二元查找树转变成排序的双向链表  题目:  输入一棵二元查找树,将该转换成个排序的双向链表。  要求不能创建任何新的结点,只调整指针向。  10  /  614  //  481216  转换成双向链表  4=6=8=10=12=14=16  首先我们定义的二元查找树节点的数据结构如下:  viewplaincopystructBSTreeNode  {  intm_nValue;//valueofnode  BSTreeNode*m_pLeft;//leftchildofnode  BSTreeNode*m_pRi

2、ght;//rightchildofnode  };  解答:  这是一个可以使用递归的传统问题。显然可以使用中序遍历(左-根-右)。按照这个方式遍历树,比较小的结点先访问。如果我们每访问一个结点,假设之前访问过的结点已经调整成一个排序双向链表,我们再把调整当前结点的指针将其链接到链表的末尾。当所有结点都访问过之后,整棵树也就转换成一个排序双向链表了。  viewplaincopyBSTreeNode*pHead=NULL;  BSTreeNode*pListIndex=NULL;  //遍历二元查找树中序  voidergodicBSTree(

3、BSTreeNode*pCurrent)  {  if(NULL==pCurrent){  return;  }  if(NULL!=pCurrent->m_pLeft){  ergodicBSTree(pCurrent->m_pLeft);  }  //节点接到链表尾部  convertToDoubleList(pCurrent);  //右子树为空  if(NULL!=pCurrent->m_pRight){  ergodicBSTree(pCurrent->m_pRight);  }  }  //二叉树转换成list  voidconver

4、tToDoubleList(BSTreeNode*pCurrent)  {  pCurrent->m_pLeft=pListIndex;  if(NULL!=pListIndex){  pListIndex->m_pRight=pCurrent;  }else{  pHead=pCurrent;  }  pListIndex=pCurrent;  cout  }  2.设计包含min函数的栈。定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。  ANSWER:  Stack

5、isaLIFOdatastructure.Whensomeelementispoppedfromthestack,thestatuswillrecovertotheoriginalstatusasbeforethatelementwaspushed.Sowecanrecovertheminimumelement,too.  viewplaincopy#defineSTACK_LEN50  typedefstruct  {  intval;  intmin;  }stack_item;  typedefstruct  {  stack_itemda

6、ta;  inttop;  }stack;  voidpush(stack*stk,intval)  {  stk->data.val=val;  if(stk->top>0)  {  if(valdata.min)  //如果当前push进的元素小于栈中最小元素  stk->data.min=val;//把当前元素置为栈中最小元素  else  //否则,不更新  stk->data.min=stk->data.min;  }  else  stk->data.min=val;  }  intpop(stack*stk)  {  returns

7、tk->data.val;  }  intmin(stack*stk)  {  returnstk->data.min;  }  3.求子数组的最大和  题目:  输入一个整形数组,数组里有正数也有负数。  数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。  求所有子数组的和的最大值。要求时间复杂度为O(n)。  例如输入的数组为1,-2,3,10,-4,7,2,-5,和最大的子数组为3,10,-4,7,2,  因此输出为该子数组的和18。  ANSWER:  Atraditionalgreedyapproach.  Keepcu

8、rrentsum,slidefromlefttoright,whensum  viewplaincopyintmaxSubarray(i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。