技术面试
上周去美图公司面试C++工程师 有两位面试官
一位面试官问了一些数据结构相关的问题 另一位面试官则问了一些项目相关的问题
交流比较顺畅 和他们的交流也反馈给我一些信息 原来工作中有些地方可以做的更好
比如代码的耗时点的评估
问到数据结构时 面试官问了我这样一个问题
1. 求两个二叉树的子节点的最低公共父节点?
这个问题当时我是这样回答的:递归向上寻找父节点 每一个父节点又各自
向下递归寻找另一个要寻找的子节点。 这个做法无疑是低效的.
面试官教我这样一种方法:两个子节点都向上递归到根节点 然后逐个验证两条
路径中的每个节点是否是公有节点 直到寻找到最低节点.
这个方法明显比我的要聪明不少,另外我查了些资料 其实这个问题还有其他解法
1. 中序遍历
2. 后序遍历
为什么可以用这两种方法呢?
因为两个子节点的公共父节点必定在他们的中间!这是个容易得出的规律.
中序遍历时 按顺序遍历 左 根 右节点
后序则是 左 右 根节点
按照这种方法可以大概圈定出公共节点的范围 再采用递归寻找会快些.
2. 求最小的k个数
这个问题我是这样答的:建立小顶堆 然后拿走堆顶节点后再调整堆为小顶堆
这样的话开销在于 第一次小顶堆的建立
后序每次小顶堆的重调整(开销不像第一次建立那么大)
这一题面试官似乎不是很满意答案 但是我回来想了下 网上能查到的还有用快排实现的
实际上也是用的递归快排 开销也不低 这个问题可能还得再想想.
工程相关的问题:
1. 关于框架的跨平台
这个问题主要也就是回