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

狗家新鲜电面跪经

全局:

2018(10-12月) 码农类General 博士 全职@google - 内推 - 技术电面  | | Other | 在职跳槽

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

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

x
其实题目非常简单,但是我个人的问题把电面当做了onsite来做,把Google Doc当成白板来写我的推理思路,结果浪费很多时间在打字上,再加上调整改错啥的,时间到了只写了一题。。。

您好!
本帖隐藏的内容需要积分高于 111 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 111 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Popular Interview Questions from Top Companies




结论就是电面因为题目普遍不难还是要重视时间,会做尽量秒了,尤其是不怎么跟你唠嗑的(比较忙没太多心思听你细节/结果导向),宁愿少交流先找张纸默默帮助自己理清思路(当然code写完一个段落还是要解释给面试官听的)迅速把code码完然后上unit test walk through,也别用时太多。吸取我惨痛的教训

评分

参与人数 13大米 +38 收起 理由
fantasy887 + 3 欢迎来一亩三分地论坛!
CCkeHooo + 2 tks
vividlau + 3 给你点个赞!
wulaoshi250 + 3 给你点个赞!
buguorici + 1 赞一个

查看全部评分


上一篇:狗哥店面二轮
下一篇:两个吸格玛 店面
推荐
Heinrich 2018-10-31 12:46:51 | 只看该作者
全局:
照着我自己的想法写了个code,觉得自己有些地方处理的不是很简洁啊,尤其是关于index和层数的处理部分……求给点建议啊啊啊。
还有,我给的test case有限,基本算法写错了一定要告诉我啊啊啊啊……感谢感谢!

  1. struct TreeNode {
  2.     int val;
  3.     TreeNode *left, *right;
  4.     TreeNode(int v) {
  5.         val = v;
  6.         left = nullptr;
  7.         right = nullptr;
  8.     }
  9. };

  10. void bfsPrint(TreeNode* root) {
  11.     if (root==nullptr) return;
  12.     queue<TreeNode*> Q;
  13.     Q.push(root);
  14.     while (!Q.empty()) {
  15.         int len = Q.size();
  16.         for (int i=0; i<len; i++) {
  17.             TreeNode* cur = Q.front();
  18.             Q.pop();
  19.             cout << cur->val << " ";
  20.             if (cur->left) Q.push(cur->left);
  21.             if (cur->right) Q.push(cur->right);
  22.         }
  23.         cout << endl;
  24.     }
  25. }

  26. bool isNodeValid_iterative(TreeNode* root, int id) {
  27.     //not sure these two corner cases are valid, better way?
  28.     if (id<=0 || root==nullptr) return false;
  29.     if (id==1 && root!=nullptr) return true;
  30.    
  31.     // find which layer the id is in
  32.     int h = 1;
  33.     while (id>(1<<h)-1) h++;
  34. //    cout << h << endl;
  35.     while (root!=nullptr && id>1) {
  36.         // on the right bra
  37.         // ((1<<h-1)-1): number of nodes on all preivous layers
  38.         // 1<<h-2: half of number of nodes on this layer
  39. //        cout << id << " " << h << endl;
  40.         if (id - ((1<<h-1)-1) > 1<<h-2) {
  41.             root = root->right;
  42.             id -= 1<<h-1;
  43.         } else {
  44.             root = root->left;
  45.             id -= 1<<h-2;
  46.         }
  47.         h--;
  48.     }
  49.     return root!=nullptr && id==1;
  50. }

  51. bool helper_recursive(TreeNode* root, int id, int h) {
  52.     if (root==nullptr) return false;
  53.     if (id==1) return true;
  54. //    cout << id << " " << h << endl;
  55.     if (id - ((1<<h-1)-1) > 1<<h-2)
  56.         return helper_recursive(root->right, id - (1<<h-1), h-1);
  57.     else
  58.         return helper_recursive(root->left, id - (1<<h-2), h-1);
  59. }

  60. bool isNodeValid_recursive(TreeNode* root, int id) {
  61.     //not sure these two corner cases are valid, better way?
  62.     if (id<=0 || root==nullptr) return false;
  63.     if (id==1 && root!=nullptr) return true;
  64.    
  65.     // find which layer the id is in
  66.     int h = 1;
  67.     while (id>(1<<h)-1) h++;
  68. //    cout << h << endl;
  69.     return helper_recursive(root, id, h);
  70. }

  71. int main() {
  72.     TreeNode* root = new TreeNode(1);
  73.     root->left = new TreeNode(2);
  74.     root->right = new TreeNode(3);
  75.     root->left->left = new TreeNode(4);
  76.     root->left->right = new TreeNode(5);
  77.     root->right->left = new TreeNode(6);
  78.     root->left->left->left = new TreeNode(8);
  79.     root->left->left->right = new TreeNode(9);
  80.     root->left->right->left = new TreeNode(10);
  81.     bfsPrint(root);
  82.     cout << endl;

  83.     cout << "Iterative & Recursive" << endl;   
  84.     for (int i=0; i<22; i++) {
  85.         cout << i << ": " << (isNodeValid_iterative(root, i) ? "True" : "False") << endl;
  86.         cout << i << ": " << (isNodeValid_recursive(root, i) ? "True" : "False") << endl;
  87.     }
  88.     return 0;
  89. }
复制代码
回复

使用道具 举报

推荐
 楼主| suntopia 2018-10-30 13:35:18 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Popular Interview Questions from Top Companies
回复

使用道具 举报

全局:
感觉是这样的。上次店面的时候面试官来晚了,然后我在解答他基础概念问题和做题的时候一直唠叨,导致时间有点紧,然后经面试官提醒赶紧找点test case过了一下。但时间还是很紧所以要加面
回复

使用道具 举报

🔗
飞人殿下 2018-10-30 12:52:45 | 只看该作者
全局:
楼主您好,我能想到的方案是,不断用 index % 2 判断从下到上来自左子树还是右子树,把结果存起来,然后从上到下遍历一遍check是否为null,请问有不需要两次遍历+o(n) 空间支出的做法吗?已加米!
回复

使用道具 举报

🔗
 楼主| suntopia 2018-10-30 13:37:32 | 只看该作者
全局:
飞人殿下 发表于 2018-10-30 12:52
楼主您好,我能想到的方案是,不断用 index % 2 判断从下到上来自左子树还是右子树,把结果存起来,然后从 ...

按照我的递归方法就不用存了,因为index固定你每次都能列公式算出来当前搜索的范围,试一试就知道了,那个数字关系很容易就能找出来
回复

使用道具 举报

🔗
xudiaolong9 2018-10-30 14:31:30 | 只看该作者
全局:
请问能求一下递归的代码吗?
回复

使用道具 举报

🔗
一剑终情 2018-10-31 01:27:01 | 只看该作者
全局:
飞人殿下 发表于 2018-10-29 22:52
楼主您好,我能想到的方案是,不断用 index % 2 判断从下到上来自左子树还是右子树,把结果存起来,然后从 ...

不用存啊,一边算余数一边往下走就行了吧
回复

使用道具 举报

🔗
Heinrich 2018-10-31 12:49:20 | 只看该作者
全局:
Heinrich 发表于 2018-10-31 12:46
照着我自己的想法写了个code,觉得自己有些地方处理的不是很简洁啊,尤其是关于index和层数的处理部分…… ...

recursive 和 iterative都写了
回复

使用道具 举报

🔗
飞人殿下 2018-11-1 05:50:16 | 只看该作者
全局:
suntopia 发表于 2018-10-30 13:37
按照我的递归方法就不用存了,因为index固定你每次都能列公式算出来当前搜索的范围,试一试就知道了,那 ...

您说的当前搜索范围指的是确定走左子树还是右子树吗?
回复

使用道具 举报

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

本版积分规则

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