回复: 43
跳转到指定楼层
上一主题 下一主题
收起左侧

Facebook Menlo Part University Day

全局:

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

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

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

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
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
y, 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大米 +52 收起 理由
bych0223 + 3 感谢分享!
ShalynChin + 3 恭喜!
knight0clk + 3 感谢分享!
qr719830 + 3 感谢分享!
爱丽丝和鲍勃 + 40

查看全部评分


上一篇:GoDaddy新鲜OA
下一篇:Google 实习 两轮电面必须背靠背 (连续)吗?
推荐
spiritrhy 2016-10-29 06:29:40 | 只看该作者
全局:
xpli521 发表于 2016-10-28 07:59
同问怎么做better than O(N^2) ? 是要把所有的integer建Trie,然后再比较吗? 这样应该会better than(n^2)  ...

每位0的个数和1的个数相乘 求和
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++) {
                                countOfOnes[j] += (nums[i] >> j) & 1;//64大小的话,这里会挪过了
                        }
                }
                int sum = 0;
                for (int count: countOfOnes) {
                        sum += count * (len - count);//0的个数 X 1的个数
                }
                return sum;
    }  
回复

使用道具 举报

推荐
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++;
  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中移到尾端。我在下面补上正确的算法
回复

使用道具 举报

推荐
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;
  6.   list<int> prevTasks; // previous task ids ordered in time
  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.    
  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
  20.     }
  21.     // make most recently executed task
  22.     prevTasks.push_back(t);
  23.     lastTime[t] = make_pair(curTime, --prevTasks.end());
  24.   }
  25.   return curTime;
  26. }
复制代码
回复

使用道具 举报

🔗
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有更好的解法嘛,求指导
回复

使用道具 举报

🔗
jacksterling 2016-10-28 07:14:32 | 只看该作者
全局:
楼主拿offer的速度好快啊!!!!
回复

使用道具 举报

🔗
 楼主| alfredaria 2016-10-28 07:23:59 | 只看该作者
全局:
pawprinter 发表于 2016-10-28 07:08
请问lz有更好的解法嘛,求指导

我当时问能否改原来的matrix,答曰可以,所以就不需要额外空间了吧。我的做法是用两个ArrayList队列维护前后两层的节点。耗尽所有节点时,返回最后一层节点,期间每个合法节点都填成'X'。  但这样做最后就需要测一次如果依然存在'O',就返回这些'O'的集合。

Pseudo code:
定义ans
维护 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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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