由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 发几个面试题
相关主题
一个树,不一定是2叉树,让设计一个数据结构来serialize和 deserialize求个java版本的binary tree serialization和deserialization
几道F家面试题谷歌面经
刚才重新回顾了一下那题问道G家的面试题。
binary tree的in-order iterator怎么写?G题,把binary tree里面的sibling节点连接起来
贡献一道G家的onsite题和简单面经(已悲剧)心情低落,需要一些bless
很可能被这题搞挂了,sort linked listF家phone interview的一道题
请问如何sort一个linked list?F家面经
FB面试题:binary tree inorder successor贡献G电 估计挂了
相关话题的讨论汇总
话题: node话题: pnode话题: null话题: mem话题: interval
进入JobHunting版参与讨论
1 (共1页)
j********e
发帖数: 1192
1
1. 一个Interval的数组,例如(1, 3), (2, 4), (2, 5),返回所有Interval
都overlap的Interval。例如(2,3)在这个例子中。
2. 一颗tree(不是BT,可以n个child), write to a file, and read.
O(logN) additional memory.
Follow up question,不写额外的数据到文件怎么办(例如不能写节点编号)
w****x
发帖数: 2483
2
1. 好像大部分interval的题都是数开始点和结束点, 不分起始点和结束点对所有点排
序, 然后过一遍, 前n个点因该都是起始点
2. 对每个数节点编号, serialize的时候记录当前的编号, 父节点编号, BFS
p*****2
发帖数: 21240
3

第一题没那么麻烦。直接merge就行了。没有overlap就退出返回空

【在 w****x 的大作中提到】
: 1. 好像大部分interval的题都是数开始点和结束点, 不分起始点和结束点对所有点排
: 序, 然后过一遍, 前n个点因该都是起始点
: 2. 对每个数节点编号, serialize的时候记录当前的编号, 父节点编号, BFS

j********e
发帖数: 1192
4
对第二题,follow up问题是,不能增加编号(不增加文件大小)怎么做

【在 w****x 的大作中提到】
: 1. 好像大部分interval的题都是数开始点和结束点, 不分起始点和结束点对所有点排
: 序, 然后过一遍, 前n个点因该都是起始点
: 2. 对每个数节点编号, serialize的时候记录当前的编号, 父节点编号, BFS

p*****2
发帖数: 21240
5

第二题DFS就行了吧?

【在 j********e 的大作中提到】
: 对第二题,follow up问题是,不能增加编号(不增加文件大小)怎么做
w****x
发帖数: 2483
6

没错 , 有个锤子看到什么都是钉子了

【在 p*****2 的大作中提到】
:
: 第二题DFS就行了吧?

w****x
发帖数: 2483
7

你总得有额外数据表示结构吧,二叉树也有左右指针啊, 要不这样:
1{2,3{4,5,6}, {7,8{9,10}}}

【在 j********e 的大作中提到】
: 对第二题,follow up问题是,不能增加编号(不增加文件大小)怎么做
p*********y
发帖数: 3
8
二爷你看scan一遍起点找最大终点找最小是不是就可以了,如果最大起点大于最小终点
输出空

【在 p*****2 的大作中提到】
:
: 第二题DFS就行了吧?

j********e
发帖数: 1192
9
哦对了,可以写入一个byte,表示是否有左右子节点。

更新: 是写入一个k,表示k个children。

【在 w****x 的大作中提到】
:
: 你总得有额外数据表示结构吧,二叉树也有左右指针啊, 要不这样:
: 1{2,3{4,5,6}, {7,8{9,10}}}

j********e
发帖数: 1192
10
Bingo

【在 p*****2 的大作中提到】
:
: 第二题DFS就行了吧?

相关主题
很可能被这题搞挂了,sort linked list求个java版本的binary tree serialization和deserialization
请问如何sort一个linked list?谷歌面经
FB面试题:binary tree inorder successor问道G家的面试题。
进入JobHunting版参与讨论
w****x
发帖数: 2483
11

不是非2叉树吗,直接说答案吧

【在 j********e 的大作中提到】
: Bingo
p*****2
发帖数: 21240
12

我觉得可以呀。

【在 p*********y 的大作中提到】
: 二爷你看scan一遍起点找最大终点找最小是不是就可以了,如果最大起点大于最小终点
: 输出空

p*****2
发帖数: 21240
13

我想就是preorder DFS, 孩子之后加个特殊符号就行了吧。

【在 w****x 的大作中提到】
:
: 不是非2叉树吗,直接说答案吧

j********e
发帖数: 1192
14
我上面说错了,可以加一个变量表示几个child。
我给的答案和peking2的一样,就是DFS。Write就比较容易了,多写一个int
表示几个children。
读的时候,用了个queue,读到某个节点时,如果它有k个children,那么
queue里最后k个就是它的children了。queue的最大长度应该是O(logN*K),
(最多K个children)

【在 w****x 的大作中提到】
:
: 不是非2叉树吗,直接说答案吧

p*****2
发帖数: 21240
15

读的时候应该用DFS也可以。

【在 j********e 的大作中提到】
: 我上面说错了,可以加一个变量表示几个child。
: 我给的答案和peking2的一样,就是DFS。Write就比较容易了,多写一个int
: 表示几个children。
: 读的时候,用了个queue,读到某个节点时,如果它有k个children,那么
: queue里最后k个就是它的children了。queue的最大长度应该是O(logN*K),
: (最多K个children)

w****x
发帖数: 2483
16

比起记录parent编号由啥优势吗,都是一个节点一个额外int啊

【在 j********e 的大作中提到】
: 我上面说错了,可以加一个变量表示几个child。
: 我给的答案和peking2的一样,就是DFS。Write就比较容易了,多写一个int
: 表示几个children。
: 读的时候,用了个queue,读到某个节点时,如果它有k个children,那么
: queue里最后k个就是它的children了。queue的最大长度应该是O(logN*K),
: (最多K个children)

w****x
发帖数: 2483
17

恩,不需要用queue

【在 p*****2 的大作中提到】
:
: 读的时候应该用DFS也可以。

j********e
发帖数: 1192
18
如果记录parent编号,文件大小上没区别。
不过重建树的时候,你怎么根据parent编号找parent?
我只想到用个数组(O(N)顺序记录节点,否则从树里面去找还挺麻烦的吧?

【在 w****x 的大作中提到】
:
: 恩,不需要用queue

w****o
发帖数: 2260
19
第2题中的 n 是事先知道的吗?是不是每个node的n都是一样的? 还是说有的node有4个
children,有的node有8个children?

【在 j********e 的大作中提到】
: 如果记录parent编号,文件大小上没区别。
: 不过重建树的时候,你怎么根据parent编号找parent?
: 我只想到用个数组(O(N)顺序记录节点,否则从树里面去找还挺麻烦的吧?

j********e
发帖数: 1192
20
n不一样,tree node里可以存


【在 w****o 的大作中提到】
: 第2题中的 n 是事先知道的吗?是不是每个node的n都是一样的? 还是说有的node有4个
: children,有的node有8个children?

w****x
发帖数: 2483
21
/*
Serialize/DeSerialize a tree
*/
struct NODE
{
int nVal;
vector vec;
NODE(int n) : nVal(n) {}
};
void _inner_serial(NODE* pNode, char*& p)
{
if (NULL == pNode)
return;
*p++ = pNode->vec.size();
*p++ = pNode->nVal;
for (vector::iterator it = pNode->vec.begin();
it != pNode->vec.end(); it++)
_inner_serial(*it, p);
}
const char* Serialize(NODE* pRoot, char mem[])
{
if (NULL == mem || NULL == pRoot)
return NULL;
char* p = mem;
_inner_serial(pRoot, p);
return mem;
}
NODE* _inner_deserial(const char*& p)
{
int n = *p++;
NODE* pRet = new NODE(*p++);
for (int i = 0; i < n; i++)
pRet->vec.push_back(_inner_deserial(p));
return pRet;
}
NODE* DeSerialize(const char mem[])
{
if (NULL == mem)
return NULL;
const char* p = mem;
return _inner_deserial(p);
}
x*******1
发帖数: 28835
22
BFS tab key separate child
1 (共1页)
进入JobHunting版参与讨论
相关主题
贡献G电 估计挂了贡献一道G家的onsite题和简单面经(已悲剧)
binary tree的 serialization很可能被这题搞挂了,sort linked list
MS onsite 面经请问如何sort一个linked list?
G家电面面经--佛云了~~FB面试题:binary tree inorder successor
一个树,不一定是2叉树,让设计一个数据结构来serialize和 deserialize求个java版本的binary tree serialization和deserialization
几道F家面试题谷歌面经
刚才重新回顾了一下那题问道G家的面试题。
binary tree的in-order iterator怎么写?G题,把binary tree里面的sibling节点连接起来
相关话题的讨论汇总
话题: node话题: pnode话题: null话题: mem话题: interval