面试题
文章平均质量分 73
flyinghearts
这个作者很懒,什么都没留下…
展开
-
微软面试题: 找出二叉树上任意两个结点的最近共同父结点。
<br /> <br />找出二叉树上任意两个结点的最近共同父结点。<br /> <br /> <br /> <br />要求两节点的最近共同父节点(LCA,lowest common ancestor),可以采用树的后序遍历。如果这两个节点不在一条线上,则它们必定分别在所求节点A的左子树和右子树上,后序遍历到第一个满足这个条件的节点就是所要求的节点A。另外,当这两个节点在一条线上,所求节点A则是这两个节点中层次最低的节点的父节点。<br /><br /><br />static bool lca(Node原创 2010-06-12 10:42:00 · 9118 阅读 · 7 评论 -
Trilogy公司的笔试题:用最少的步骤将数转为1
Trilogy公司的笔试题:如果n为偶数,则将它除以2,如果n为奇数,则将它加1或者减1。问对于一个给定的n,怎样才能用最少的步骤将它变到1。最简单的方法就是用DP。设f(n)为所用的最少步骤。根据定义可得:若n为偶数, f(n)=f(n/2) + 1;若n为奇数, f(n)= min(f(n-1), f(n+1)) +1 = min(f((n-1)/2), f((n+1)/2)) +2或者: f(2*k)=f(k)+1 f(2*k+1)=min(f(k),f(k+原创 2010-06-12 10:15:00 · 2071 阅读 · 1 评论 -
螺旋矩阵
<br />问题<br />1 按顺时针方向构建一个m * n的螺旋矩阵(或按顺时针方向螺旋访问一个m * n的矩阵):<br />2 在不构造螺旋矩阵的情况下,给定坐标i、j值求其对应的值f(i, j)。<br />比如对11 * 7矩阵, f(6, 0) = 27 f(6, 1) = 52 f(6, 3) = 76 f(6, 4) = 63<br /> <br /> <br />构建螺旋矩阵<br />对m * n 矩阵,最先访问最外层的m * n的矩形上的元素,接着再访问里面一层的 (m - 2)原创 2010-12-23 23:19:00 · 1124 阅读 · 0 评论 -
螺旋矩阵
<br />问题<br />1 按顺时针方向构建一个m * n的螺旋矩阵(或按顺时针方向螺旋访问一个m * n的矩阵):<br />2 在不构造螺旋矩阵的情况下,给定坐标i、j值求其对应的值f(i, j)。<br />比如对11 * 7矩阵, f(6, 0) = 27 f(6, 1) = 52 f(6, 3) = 76 f(6, 4) = 63<br /> <br /> <br />构建螺旋矩阵<br />对m * n 矩阵,最先访问最外层的m * n的矩形上的元素,接着再访问里面一层的 (m - 2)原创 2010-12-23 23:17:00 · 1294 阅读 · 0 评论 -
避免计算过程中出现溢出的一个技巧
先看一道面试题: 长度为n的数组,由数字1到n组成,其中数字a不出现,数字b出现两次,其它的数字恰好出现一次。怎样通过只读遍历一次数组,找出数字a和b。 由于只能遍历一次,在遍历数组arr时,算出 a和b的差值,以及a和b的平方差,通过解方程,即可求得a和b。具体做法为:设: s1 = 1 + 2 + ... + n (= n * (n原创 2012-03-20 21:05:23 · 5109 阅读 · 0 评论