给一个list, 如何把里面的字符分配到尽量少的子list里,并且每个子list没有重复元素。
比如
['a','b','c','a','a','b'], 可以分成['a', 'b', 'c'], ['a', 'b'], ['a']
['a', 'a', 'a', 'b', 'b', 'b'],可以分成['a', 'b'], ['a', 'b'], ['a', 'b']
先给出了O(n*2)的解法,后来发现可以先数一遍字符个数,找到出现最多的,比如a出现3次,就建3个子list,然后把每种字符round robin那样放进各个list就行了, 这样是O(n)
半小时电面,面试官叫Prabu,在西雅图office的印度人,是个manager。简要介绍一番,开始做题。题目比较经典,有整形数据流,求过去五分钟来的所有整数的mean。
写了个List,创建了自己的数据类来存val和timeStamp,新的后面加List,过期的在头部删除。
把删除的部分放在了mean()函数里,follow-up说这样太慢,就提出来放到一个cleaner()函数里,同时写了个Thread 没过一段时间跑一次cleaner(),
同时mean()里面也要先调用cleaner。然后被问到多线程需要注意啥,就指出一段code是critical section,要用锁保护。
小贴士:要写注释,把和面试官讨论到但是没写的follow-up,都加到注释里,as good evidence。
. from: 1point3acres.com/bbs
public Solution {
static final WINDOW = 5*60*1000;
long now();
double mean();
void put(int value);
}
感觉Indeed的面试官很喜欢把多线程的东西作为follow-up,比如ExpiringMap,比如我这个。
面经总结:
http://interviewsource.blogspot.com/