面经
来源:互联网 发布:mac下载器与win的idm 编辑:程序博客网 时间:2024/05/09 09:50
1. 判断两节点是否是祖先和后代的关系;
思路一:生成父指针,从孩子节点向上寻找,o(n);要求继续优化,可以采用跳表的方式来实现,这里涉及了一个孩子节点和祖先节点的层数问题,例如,输入两节点的层数差,直接利用跳表就很容易到达。
思路二:利用深度优先遍历的思想。
2. 沿着地球表面走,先向南一公里,再向东一公里,再向北走一公里,回到原点,问地球表面有哪些满足这种情况的点?
3. 一个n位数,给定k<n,从中取出k位,使得剩下的数最小(各位相对位置不变)。
思路:采用两种方式,一种是从前往后逐个确定最高位、次高位。。。直到全部确定,就获得了最小值。另一种方式是逐步填充的方法。都是O(N2)的复杂度。
说太高了。。要求继续优化,可以考虑前面的比较为后面的比较提供参考吧,用堆?细节还没想好,但貌似可以优化到O(n*logn)
补充:
可以通过堆来进行优化,规则如下:
如果遇到更小的,清空当前堆,将当前节点作为新的堆的起点;
如果遇到大的,直接加入堆,并调整堆,使之维持最小堆。
以4 1 5 3 2举例 k = 2则,n-k = 3
1. 首先扫描4, 1, 5:
堆中加入4,遇到1,清空堆,当前堆仅包含1;
遇到5,将5加入堆。
选择堆的起点作为最高位,即最高位为1.
此时,堆中还剩下5.
2. 继续扫描3,
与当前堆顶相比较小,清空堆,将3加入堆。
选择堆的起点作为次高位,即次高位为3.
此时,堆为空。
3. 继续扫描2,
新建堆,仅含有元素2.
选择堆的起点作为最低位,即2.
完成。
结果为132.正确。
扫描一遍复杂度为O(N),堆的调整为O(N-K),故为O(N*LOG(N))
- 面经
- 面经
- 面经
- 面经
- 面经
- 面经
- 面经
- 面经
- 面经
- 面经
- 面经
- 面经
- 面经
- 面经
- 面经
- 面经
- 面经
- 面经
- 腾讯笔试题目
- wpa_supplicant
- status2从取值的方式
- Big Data系统架构
- 输入一棵二叉树,求该树的深度
- 面经
- lucene 分页
- HDU 4082 Hou Yi's secret
- org.tigris.subversion.javahl.ClientException Attempted to lock an already-locked dir异常解决方法
- visual studio 2008编译libnids的问题
- 基于分析的提示应用又一例(实现复杂的TopN)
- applescript 按键对应编码
- myeclipse6.5下面安装maven插件及m2eclipse插件
- Diskpart 命令行实用工具介绍