算法面试100题-读书笔记解释.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6 题—不会 腾讯面试题: 给你10 分钟时间,根据上排给出十个数,在其下排填出对应的十个数 要求下排每个数都是先前上排那十个数在下排出现的次数。 上排的十个数如下: 【0,1,2,3,4,5,6,7,8,9】 举一个例子, 数值: 0,1,2,3,4,5,6,7,8,9 分配: 6,2,1,0,0,0,1,0,0,0 0 在下排出现了6 次,1 在下排出现了2 次, 2 在下排出现了1 次,3 在下排出现了0 次.... 以此类推.. ★不用乘法或加法增加8 倍。现在用同样的方法增加7 倍。 增加8倍:x3 增加7倍: 有两种方法: 7 = 8 - 1 则:(x3)-x 7 = (16-2)/2 则:(x4 - x1)1 第10 题 翻转句子中单词的顺序。 题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。 句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 例如输入“I am a student.”,则输出“student. a am I”。 Answer: 先把句子全部翻转, 再翻转每个单词。 第15题: 题目:输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点。 用递归和循环两种方法完成树的镜像转换。?? 例如输入: ?? 8 ? / / 6? 10 / / / / 5 7 9 11 输出: ??? 8 ?? / / ? 10? 6 / / / / 11 9 7? 5 定义二元查找树的结点为: struct BSTreeNode // a node in the binary search tree (BST) { ? int m_nValue; // value of node ? BSTreeNode *m_pLeft; // left child of node ? BSTreeNode *m_pRight; // right child of node }; //就是递归翻转树,有子树则递归翻转子树。 //July、2010/10/19 void Revertsetree(list *root) { ??? if(!root) ?????? return; ??? list *p; ??? p=root-leftch; ??? root-leftch=root-rightch; ??? root-rightch=p; ??? if(root-leftch) ????? Revertsetree(root-leftch); ??? if(root-rightch) ????? Revertsetree(root-rightch); } ? 由于递归的本质是编译器生成了一个函数调用的栈, 因此用循环来完成同样任务时最简单的办法就是用一个辅助栈来模拟递归。 首先我们把树的头结点放入栈中。 在循环中,只要栈不为空,弹出栈的栈顶结点,交换它的左右子树。 如果它有左子树,把它的左子树压入栈中; 如果它有右子树,把它的右子树压入栈中。 这样在下次循环中就能交换它儿子结点的左右子树了。 //再用辅助栈模拟递归,改成循环的(有误之处,望不吝指正): void Revertsetree(list *phead) { ??? if(!phead) ?????? return; ??? stacklist* stacklist; ??? stacklist.push(phead);???????? //首先把树的头结点放入栈中。 ??? while(stacklist.size()) ??? //在循环中,只要栈不为空,弹出栈的栈顶结点,交换它的左右子树 ??? { ????? list* pnode=stacklist.top(); ????? stacklist.pop(); ?? ????? list *ptemp; ????? ptemp=pnode-leftch; ????? pnode-leftch=pnode-rightch; ????? pnode-rightch=ptemp; ????? if(pnode-leftch) ??????? stacklist.push(pnode-leftch);?? //若有左子树,把它的左子树压入栈中 ????? if(pnode-rightch) ??????? stacklist.push(pnode-rightch);? //若有右子树,把它的右子树压入栈中 ??? } } 32. 有两个序列a,b,大小都为n,序列元素的值任意整数,无序; 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。 例如:? var a=[100,99,98,1,2, 3]; v

文档评论(0)

花仙子 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档