先过了个一个online test,然后2轮电面。Online Test挺简单的两个题,这里就不提了。 等待onsite。。。
电面1:
一个国人大哥面的,LeetCode上sudoku的两个题和在一起,API稍微有点变化。国人很nice,就是时间太紧了,迟到5分钟,聊天10多分钟,所以coding时间不到半个小时,DFS的时候没有时间写带pruning的更优解法了,只是简单说了说。
电面2:
还是一个国人大哥,LeetCode上的Insert Interval,API稍微有点变化,给的是一个链表节点。
由于还有时间,还考了一个count tweets的设计题。需要实现如下API:
class CountingSvc {
void tweet(long timestamp, int tweetLength);
double avgLength(long begin, long end, long threshold);
};
另外给了一个hint,TreeMap<Long, Object>,让自己customize一下object。
可惜我一看是range query就往线段树上想了,于是给出了如下结构,并解释了原理。
class Node {
long totalLen;
long count;
long begin;
long end;
Node left;
Node right;
}
最后追问了下如何去做模糊处理。我还是在线段树上想,就加了一个threshold。
double avgLength(long begin, long end, long threshold);
如果线段树上节点和所给的begin,end组合成的节点很相似,就不需要继续往下进行查询处理了。
随便写了一个计算相似度的公式:abs(begin1 - begin2) + abs(mid1 - end2) <= threshold,还在琢磨怎么弄更好,他就说很满意了。
虽然这题给我的hint是个TreeMap,但对这种封装好的红黑树无感,毕竟insert操作不能灵活修改算法。其实如果给个自定义的BST,就在节点上加两个2个prefix sum的域就可以了。