一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 2689|回复: 43
收起左侧

Facebook Menlo Part University Day

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

2016(10-12月) 码农类 硕士 全职@Facebook - 内推 - Onsite |Passfresh grad应届毕业生

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

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x

University Day前电面,一位国人phd姐姐给了一道LC273。Integer to Words.
一周后收到HR约Onsite的邮件,说干脆把我扔到 10/20 Menlo Park 的 University Day吧。听说只是3轮时心里好开心。  以下Onsite 题目:

第一轮 一年多工作经验的印度小哥,不苟言笑。

1. Find all cells that are furthest to knights: (X is wall, O is space, K is Knight)(multiple knights)
O O O
O X O
K X O
return [(2,2)]
Corner case:
(1). [O], return all O’s
(2). [K X O O] should return all [(0,2), (0,3)] because they are all on the other side
Asked: Why BFS is more efficient than DFS
.鐣欏璁哄潧-涓浜-涓夊垎鍦
2. Task execution with k period cooldown (keep order), all tasks take 1 time period. e.g.
[1,1,2,1] with k = 2, time consumption is 7 (1 _ _ 1 2 _ 1)
optimize storage, you don't need to store all task numbers.
提议用LinkedHashMap,要说明至少一种implementation 方式,并且每次执行task都检查最早的element,如果执行记录远久直接移除。只有15分钟所以写了pseudo code。

第二轮 一年多工作经验的ABC(非常nice,做完题闲聊了20分钟):
.1point3acres缃
3. Flatten linked list
Struct{
  int val;
  Struct next, child;
}
e.g.
3 -> 4 -> 5
        |
        6 -> 7
        |
        8 -> 9
return 3 -> 4 -> 6 -> 8 -> 9 -> 7 -> 5

4. Total hamming distance of all numbers in array. The array contains all 64 bits integers,
   and two integers respectively having 0 and 1 at one digit contributes 1 hamming distance.
   E.g. 11011 : 10011 has Hamming distance 1, and 11111 : 01100 has 3.
   
   Follow up: Do better than O(n^2) brute force.

第三轮 五年多工作经验的国人

5.1. Behavior interview. 没有问why facebook,但问我以前的team project, intern project和分工。

5.2. Move non-zeros to the left side in array, return the count of non-zero integers, don't care about the rest of the array which are not used, require minimum number of writes. Order of integers does not matter.

[size=14.666666666666666px]e.g.[1,0,2,0,4,0,5,7] -> [1,7,2,5,4,x,x,x] and return 5. # writes is 2.

周三收到HR电话给offer details。

评分

5

查看全部评分

spiritrhy 发表于 2016-10-29 06:29:40 | 显示全部楼层
xpli521 发表于 2016-10-28 07:59-google 1point3acres
同问怎么做better than O(N^2) ? 是要把所有的integer建Trie,然后再比较吗? 这样应该会better than(n^2)  ...
鏉ユ簮涓浜.涓夊垎鍦拌鍧.
每位0的个数和1的个数相乘 求和-google 1point3acres
public static int hammingDistanceSum(int[] nums, int k) {
          int len = nums.length;
                int[] countOfOnes = new int[32];//统计每位的1的个数总和
                for (int i = 0; i < len; i++) {
                        for (int j = 0; j < 32; j++) {.鏈枃鍘熷垱鑷1point3acres璁哄潧
                                countOfOnes[j] += (nums >> j) & 1;//64大小的话,这里会挪过了
                        }
                }.1point3acres缃
                int sum = 0;. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
                for (int count: countOfOnes) {
                        sum += count * (len - count);//0的个数 X 1的个数
                }
                return sum;
    }  
回复 支持 3 反对 0

使用道具 举报

zzgzzm 发表于 2016-10-30 09:11:51 | 显示全部楼层
whitney94 发表于 2016-10-30 06:11
多谢楼主分享!能问一下楼主第一轮第二题task with k cooldown的那个followup,怎么用linkedhashmap啊,为 ...

这个题时间是O(N) (N为tasks总数)。如果只用一个unordered_map<int,int> lastTime来记录一个task最后一次执行的时间的话那么最差空间就是O(N)。但是随着时间推移,当一个task最后一次执行时间早于currentTime - k的时候就没有必要保存了,因为从currentTime 起反正cool down时间都已经过了,所以其实保存lastTime中最新的k个就足够了。这样空间消耗就从O(N)降到了O(min(N,k))。但是unordered_map是没有顺序概念的,所以在C++中就再配合使用一个list<int> prevTasks来按时间顺序记录最近执行过的k个task ids.注意list是node based container,所以再删除第一个元素时的操作pop_front()是O(1)的,这个很重要,保持整体算法时间还是O(N)的。
我对Java不熟,估计linkedhaskmap在Java中是类似的意思。
  1. int TimeConsumption(vector<int>& tasks, int k) {
  2.   if (k <= 0) return tasks.size(); // no cool down needed
  3.   // store info only within last k time stamps
  4.   unordered_map<int,int> lastTime; // task id->last executed time stamp
  5.   list<int> prevTasks; // previous task ids ordered in time
  6.   int curTime = 1; // current time stamp
  7.   
  8.   for (int t : tasks) {
  9.     // remove oldest task if older than curTime - k  
  10.     if (!prevTasks.empty() && lastTime[*prevTasks.begin()] < curTime - k)
  11.     { lastTime.erase(*prevTasks.begin()); prevTasks.pop_front(); }
  12.    
  13.     // t is not executed within last k time stamps
  14.     if (!lastTime.count(t)) {
  15.         lastTime[t] = curTime++;. from: 1point3acres.com/bbs
  16.         prevTasks.push_back(t);
    .鐣欏璁哄潧-涓浜-涓夊垎鍦
  17.     }
  18.     // t is executed within last k time stamps
  19.     else {
  20.         lastTime[t] += (k+1);
  21.         curTime = lastTime[t];
  22.     }
  23.   }
  24.   return curTime;
  25. }
复制代码

补充内容 (2016-10-30 09:20):
Sorry. 以上算法在else case "// t is executed within last k time stamps"时没有将task t从list中移到尾端。我在下面补上正确的算法
回复 支持 2 反对 0

使用道具 举报

zzgzzm 发表于 2016-10-30 09:42:50 | 显示全部楼层
更正25层算法:当当前task need cool down时,需要将当前task从list移到尾部,所以需要在unordered_map中有list::iterator的位置。将lastTime改为从task到pair(last time, list::iterator)。
  1. int TimeConsumption(vector<int>& tasks, int k) {
  2.   if (k <= 0) return tasks.size(); // no cool down needed
  3.   // store info only within last k time stamps
  4.   // task id->(last executed time stamp, list position)
  5.   unordered_map<int,pair<int,list<int>::iterator>> lastTime;
    . more info on 1point3acres.com
  6.   list<int> prevTasks; // previous task ids ordered in time -google 1point3acres
  7.   int curTime = 0; // current time stamp
  8.   
  9.   for (int t : tasks) {
  10.     curTime++;
  11.    
  12.     // remove oldest task if older than curTime - k  
  13.     if (!prevTasks.empty() && lastTime[*prevTasks.begin()].first < curTime - k)
  14.     { lastTime.erase(*prevTasks.begin()); prevTasks.pop_front(); }
  15.     . Waral 鍗氬鏈夋洿澶氭枃绔,
  16.     // if executed within last k time stamps
  17.     if (lastTime.count(t)) {
  18.       prevTasks.erase(lastTime[t].second);
  19.       curTime = lastTime[t].first + k + 1; // need cool down. from: 1point3acres.com/bbs
  20.     }
  21.     // make most recently executed task
  22.     prevTasks.push_back(t);
  23.     lastTime[t] = make_pair(curTime, --prevTasks.end());
  24.   }
    .1point3acres缃
  25.   return curTime;
  26. }
复制代码
回复 支持 1 反对 0

使用道具 举报

 楼主| alfredaria 发表于 2016-10-28 07:23:59 | 显示全部楼层
pawprinter 发表于 2016-10-28 07:08
请问lz有更好的解法嘛,求指导

我当时问能否改原来的matrix,答曰可以,所以就不需要额外空间了吧。我的做法是用两个ArrayList队列维护前后两层的节点。耗尽所有节点时,返回最后一层节点,期间每个合法节点都填成'X'。  但这样做最后就需要测一次如果依然存在'O',就返回这些'O'的集合。. Waral 鍗氬鏈夋洿澶氭枃绔,
. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
Pseudo code:
定义ans. 1point 3acres 璁哄潧
维护 q1 q2
向q1加入所有knights节点,将这些节点的值设为'X‘
while q1 非空:. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
    对q1中每个节点n:
       对n的每个合法邻居m(边界内、值为'O'):
          将m放入q2,并设值为'X’
    if q2为空,ans = q1 跳出while循环
    else q1 = q2
if matrix 还有'O'节点,返回全部'O'的节点
else 返回 ans
回复 支持 1 反对 0

使用道具 举报

hrl1991 发表于 2016-10-28 06:24:52 | 显示全部楼层
恭喜!楼主什么时候onsite的?有要reference吗?
回复 支持 反对

使用道具 举报

 楼主| alfredaria 发表于 2016-10-28 06:27:39 | 显示全部楼层
hrl1991 发表于 2016-10-28 06:24
恭喜!楼主什么时候onsite的?有要reference吗?

有的,要一个manager 和一个professor,但是周二给的,所以貌似HR不用先特地联系他们再做决定
回复 支持 反对

使用道具 举报

pawprinter 发表于 2016-10-28 06:33:24 | 显示全部楼层
问下lz 第一题是说找最远的么?也就是说如果到不了,距离是INF?
我想法就是开一个board,全部初始化为INF,然后BFS更新距离,最后输出最远的那几个?
求细节
回复 支持 反对

使用道具 举报

 楼主| alfredaria 发表于 2016-10-28 07:02:09 | 显示全部楼层
pawprinter 发表于 2016-10-28 06:33
问下lz 第一题是说找最远的么?也就是说如果到不了,距离是INF?
我想法就是开一个board,全部初始化为INF ...

可以这样做
回复 支持 反对

使用道具 举报

bbsbbstry 发表于 2016-10-28 07:04:20 | 显示全部楼层
第四题直接异或再数1就是constant吧?还是我理解错题了?为什么会涉及O(n^2) ?
回复 支持 反对

使用道具 举报

hrl1991 发表于 2016-10-28 07:05:16 | 显示全部楼层
alfredaria 发表于 2016-10-28 06:27
有的,要一个manager 和一个professor,但是周二给的,所以貌似HR不用先特地联系他们再做决定

谢谢回复! 你是用pending offer催的吗? 我也被要了ref 但是一个礼拜过去了都还没消息呢
回复 支持 反对

使用道具 举报

pawprinter 发表于 2016-10-28 07:08:06 | 显示全部楼层

请问lz有更好的解法嘛,求指导
回复 支持 反对

使用道具 举报

victorsterling 发表于 2016-10-28 07:14:32 | 显示全部楼层
楼主拿offer的速度好快啊!!!!
回复 支持 反对

使用道具 举报

wtcupup 发表于 2016-10-28 07:36:21 | 显示全部楼层
求问第四题如何better than O(N^2) ?
回复 支持 反对

使用道具 举报

xpli521 发表于 2016-10-28 07:59:22 | 显示全部楼层
同问怎么做better than O(N^2) ? 是要把所有的integer建Trie,然后再比较吗? 这样应该会better than(n^2) ..
回复 支持 反对

使用道具 举报

yhatl 发表于 2016-10-28 09:26:51 | 显示全部楼层
xpli521 发表于 2016-10-28 07:59. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
同问怎么做better than O(N^2) ? 是要把所有的integer建Trie,然后再比较吗? 这样应该会better than(n^2)  ...

hamming distance就是l1-norm,按位做,然后把64位distance加起来就行了
回复 支持 反对

使用道具 举报

spiritrhy 发表于 2016-10-28 13:58:55 | 显示全部楼层
楼主是在职跳槽吗,要manager的ref,我刚工作一年,只有现在的manager。。。无法弄啊
回复 支持 反对

使用道具 举报

 楼主| alfredaria 发表于 2016-10-29 01:21:36 | 显示全部楼层
spiritrhy 发表于 2016-10-28 13:58
楼主是在职跳槽吗,要manager的ref,我刚工作一年,只有现在的manager。。。无法弄啊

我是new grad。。给的是以前实习的manager。
回复 支持 反对

使用道具 举报

pawprinter 发表于 2016-10-29 01:25:26 | 显示全部楼层
alfredaria 发表于 2016-10-28 07:23
我当时问能否改原来的matrix,答曰可以,所以就不需要额外空间了吧。我的做法是用两个ArrayList队列维护 ...
. 1point3acres.com/bbs
谢谢lz 字数子数组
回复 支持 反对

使用道具 举报

jfree811 发表于 2016-10-29 08:04:16 | 显示全部楼层
alfredaria 发表于 2016-10-28 07:23.鏈枃鍘熷垱鑷1point3acres璁哄潧
我当时问能否改原来的matrix,答曰可以,所以就不需要额外空间了吧。我的做法是用两个ArrayList队列维护 ...

求教楼主一个情况呀
O X O O
O X O O
. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴K X K O
像这个情况的话 应该输出哪些点最远呢? 因为被分成两个部分 (0, 0)点对于(2, 2)的knight距离是无限远。楼主的算法好像对于这个情况会输出 (0, 0) (0,2)(0,3)?
回复 支持 反对

使用道具 举报

pawprinter 发表于 2016-10-29 08:31:28 | 显示全部楼层
jfree811 发表于 2016-10-29 08:04. Waral 鍗氬鏈夋洿澶氭枃绔,
求教楼主一个情况呀
O X O O
O X O O
. more info on 1point3acres.com
应该是输出(0, 3)吧,我觉得是输出到任意一个knight的最短距离最大的点
回复 支持 反对

使用道具 举报

jfree811 发表于 2016-10-29 08:55:34 | 显示全部楼层
pawprinter 发表于 2016-10-29 08:31
应该是输出(0, 3)吧,我觉得是输出到任意一个knight的最短距离最大的点

. more info on 1point3acres.com这道题应该是LC叁药企 应该是所有的Knight
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

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

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

custom counter

GMT+8, 2016-12-5 22:54

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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