May 2009 - May 2017 论坛八周年-你的足迹,我的骄傲


一亩三分地论坛

 找回密码
 获取更多干活,快来注册

一亩三分地官方iOS手机应用下载
查看: 2228|回复: 8
收起左侧

FB电面

[复制链接] |试试Instant~ |关注本帖
zengm321 发表于 2016-10-15 03:15:53 | 显示全部楼层 |阅读模式

2016(10-12月) 码农类 博士 全职@Facebook - 猎头 - 技术电面 |Other在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干活,快来注册

x
刚面的。
一烙印面的,上来一道简单的题,intersection of two arrays。 看到这么简单的还挺激动,但故事肯定不是这么简单啦。
先把简单的two pointer解法写完,然后问可不可优化。尼玛,都O(m + n)了,还要咋。
于是说如果一个特长,那就binary search吧。好写完了。问如何优化? 尼玛,都mlog(n)了,还咋样啊。
于是说如果找到了,一个元素,那就用这次的index作为下次binary search的开始。可以节约掉之前的东西,不用search了。然后问,如果找不到呢,如何优化。尼玛
折腾了一会儿,说如果找不到,也返回上次search 结束的index,然后下次接着search。终于时间到了。. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
感觉要黑也是有操作空间的。
现在FB是不是喜欢问follow up, 而不是2个问题了?

wangyuesong2 发表于 2016-10-15 04:41:28 | 显示全部楼层
关注一亩三分地公众号:
Warald_一亩三分地
要是一个数组特别长,sort两个数组不是就要max(mlogm, nlogn)了吗,这个会比m+n快吗
回复 支持 反对

使用道具 举报

 楼主| zengm321 发表于 2016-10-15 05:26:38 | 显示全部楼层
关注一亩三分地微博:
Warald
wangyuesong2 发表于 2016-10-15 04:41
要是一个数组特别长,sort两个数组不是就要max(mlogm, nlogn)了吗,这个会比m+n快吗

说漏一点,两个数组都是sorted array
回复 支持 反对

使用道具 举报

iPhD 发表于 2016-10-16 06:20:46 | 显示全部楼层
"折腾了一会儿,说如果找不到,也返回上次search 结束的index,然后下次接着search",这个的意思是维护一个lastIndex变量,只有上一次找到时,才更新他是吗?面试官想要的就是这个意思?

楼主有消息了吗?
回复 支持 反对

使用道具 举报

 楼主| zengm321 发表于 2016-10-16 23:44:15 | 显示全部楼层
iPhD 发表于 2016-10-16 06:20. From 1point 3acres bbs
"折腾了一会儿,说如果找不到,也返回上次search 结束的index,然后下次接着search",这个的意思是维护一个 ...

就是上一次找到了,就用这个index;如果找不到,也有一个ending index,就用那个index当starting index。
比如1, 89, 100, 去找90;如果不存在,那么bi search的ending index应该是89,所以下次就从那个index开始。

我周五面的,现在没有消息。
回复 支持 反对

使用道具 举报

iPhD 发表于 2016-10-16 23:48:37 | 显示全部楼层
zengm321 发表于 2016-10-16 23:44.鐣欏璁哄潧-涓浜-涓夊垎鍦
就是上一次找到了,就用这个index;如果找不到,也有一个ending index,就用那个index当starting index。 ...

多谢楼主!!!不过你那个例子里如果找90,下次应该从100开始吧?就像Arrays.binarySearch里,如果找不到,会返回要插入的位置-(index + 1),index是要插入的位置,是这样吧?

祝楼主好运!!
回复 支持 反对

使用道具 举报

 楼主| zengm321 发表于 2016-10-17 06:04:34 | 显示全部楼层
iPhD 发表于 2016-10-16 23:48. Waral 鍗氬鏈夋洿澶氭枃绔,
多谢楼主!!!不过你那个例子里如果找90,下次应该从100开始吧?就像Arrays.binarySearch里,如果找不到 ...

对。我写的就是返回要插入的index的。
但是不管返回89还是100的index都无所谓,反正只差一个,对performance没有明显影响的。
回复 支持 反对

使用道具 举报

youto 发表于 2016-10-28 12:41:59 | 显示全部楼层
和楼主面了同样的一道题,而且followup问的也都差不多,面试官也是三哥,估计是同一个人,多谢楼主的面经分享🙏🙏🙏🙏🙏🙏🙏🙏
回复 支持 反对

使用道具 举报

zzgzzm 发表于 2016-10-28 13:44:48 | 显示全部楼层
Intersection of two sorted arrays: 每次binary search时,找出第一个不小于目标的index(C++ std::lower_bound),那么若没有找到,index就是下次search的起点;若找到了,index+1是新的起点。
鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  1. // assume vector A is longer than a-google 1point3acres
  2. vector<int> getIntersectionSorted(vector<int>& A, vector<int>& a) {. 鍥磋鎴戜滑@1point 3 acres
  3.   vector<int> res; // store intersection values
  4.   vector<int>::iterator pos = A.begin(); // start position of binary search
  5.   for (int x:a) {
  6.     // find position of first element which is no less than x with binary search. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  7.     if ((pos = lower_bound(pos,A.end(),x)) == A.end()) return res;
  8.     else if (*pos == x) { res.push_back(x); pos++; }. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  9.   }
  10.   return res;
  11. }
复制代码
回复 支持 反对

使用道具 举报

本版积分规则

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2017-5-30 14:00

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表