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

Google电面,面经

全局:

2015(7-9月) 码农类General 硕士 全职@google - 内推 - 技术电面  | | Other | 应届毕业生

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

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

x
地里的同志帮忙给的内推,在这里谢谢了, @

电面的是中国同胞,上来介绍完就开始做题。

第一问,totalpass of an element x in array A is defined as the number of elements which is
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies

估计是要跪了。祝大家好运。



补充内容 (2015-10-5 00:51):
结果竟然拿到onsite了,可能是面试小哥手下留情了。总之大家加油,地里朋友祝我好运啊。

评分

参与人数 1大米 +30 收起 理由
pengzewen37 + 30 感谢分享!

查看全部评分


上一篇:Amazon OA1(10.5 due)
下一篇:TripAdvisor

本帖被以下淘专辑推荐:

推荐
八月槎 2015-10-10 15:16:44 | 只看该作者
全局:
第二题可以用两个priority_queue(就是堆),第一个大根堆存储比当前数小的数字,第二个小根堆存比当前数大的数字
然后每次move next 就看数变大还是变小了,然后从一个堆pop()到另一个堆
回复

使用道具 举报

推荐
gp89757 2015-9-30 16:12:46 | 只看该作者
全局:
  1. #include <vector>
  2. #include <stdio.h>
  3. #include <algorithm>
  4. #include <utility>

  5. using namespace std;


  6. //left pass
  7. void merge_sort(vector<pair<int,int>> &vp, vector<int> &sp) {
  8.     if (vp.size() < 2) return;
  9.     int m = vp.size()/2;
  10.     vector<pair<int,int>> va(vp.begin(), vp.begin()+m),
  11.         vb(vp.begin()+m, vp.end());
  12.     merge_sort(va, sp);
  13.     merge_sort(vb, sp);
  14.     for (int i=0,j=0,k=0; i<va.size()||j<vb.size();) {
  15.         if (i<va.size() && j<vb.size()) {
  16.             if (va[i].first > vb[j].first)
  17.                 vp[k++] = va[i++];
  18.             else {
  19.                 int id = vb[j].second;
  20.                 sp[id] += i;
  21.                 vp[k++] = vb[j++];
  22.             }
  23.         }
  24.         else if (i<va.size())
  25.             vp[k++] = va[i++];
  26.         else {
  27.             int id = vb[j].second;
  28.             sp[id] += i;
  29.             vp[k++] = vb[j++];
  30.         }
  31.     }
  32. }
  33. int left_pass(vector<int> v) {
  34.     int len = v.size();
  35.     vector<int> sp(len, 0);
  36.     vector<pair<int,int>> vp;
  37.     for (int i=0; i<v.size(); i++)
  38.         vp.push_back(make_pair(v[i], i));
  39.     merge_sort(vp, sp);
  40.     int ans = 0;
  41.     for (auto x:sp)
  42.         ans = max(ans, x);
  43.     return ans;
  44. }

  45. int left_pass_brute_force(vector<int> v) {
  46.     int ans = 0;
  47.     for (int i=1; i<v.size(); i++) {
  48.         int cnt = 0;
  49.         for (int j=i-1; j>=0; j--)
  50.             if (v[i] < v[j]) cnt++;
  51.         ans = max(ans, cnt);
  52.     }
  53.     return ans;
  54. }

  55. void test_left_pass(int ncase) {
  56.     int npass = 0;
  57.     for (int i=0; i<ncase; i++) {
  58.         int size = rand()%1007;
  59.         vector<int> v(size);
  60.         for (int j=0; j<size; j++)
  61.             v[j] = rand()%17;
  62.         if (left_pass(v) == left_pass_brute_force(v))
  63.             npass ++;
  64.     }
  65.     printf("%d/%d\n", npass, ncase);
  66. }

  67. int main()
  68. {   
  69.     test_left_pass(1007);
  70.     return 0;
  71. }
复制代码
回复

使用道具 举报

推荐
Wizmann 2015-9-30 09:39:49 | 只看该作者
全局:
第二题:
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <iostream>
  5. #include <algorithm>
  6. #include <vector>
  7. #include <map>

  8. using namespace std;

  9. #define print(x) cout << x << endl
  10. #define input(x) cin >> x

  11. class BITree {
  12. public:
  13.     void init(int size) {
  14.         _tree.resize(size + 1);
  15.         fill(_tree.begin(), _tree.end(), 0);
  16.     }

  17.     void add(int pos, int value) {
  18.         while (pos < _tree.size()) {
  19.             _tree[pos] += value;
  20.             pos += lowbit(pos);
  21.         }
  22.     }

  23.     int sum(int pos) {
  24.         int res = 0;
  25.         while (pos > 0) {
  26.             res += _tree[pos];
  27.             pos -= lowbit(pos);
  28.         }
  29.         return res;
  30.     }
  31. private:
  32.     inline int lowbit(int x) { return x & (-x); }

  33. private:
  34.     vector<int> _tree;
  35. };

  36. int main() {
  37.     freopen("input.txt", "r", stdin);
  38.     int n;
  39.     vector<int> nums;
  40.     map<int, int> mp;

  41.     input(n);
  42.     nums.resize(n);
  43.     for (int i = 0; i < n; i++) {
  44.         input(nums[i]);
  45.         mp[nums[i]] = -1;
  46.     }

  47.     int idx = 0;
  48.     for (auto& p: mp) {
  49.         p.second = ++idx;
  50.     }

  51.     BITree bitree;
  52.     bitree.init(n + 1);

  53.     int ans = 0;
  54.     for (int i = 0; i < n; i++) {
  55.         int u = nums[i];
  56.         ans = max(ans, bitree.sum(u));
  57.         bitree.add(u, 1);
  58.     }
  59.     print(ans);
  60.     return 0;
  61. }
复制代码

补充内容 (2015-9-30 09:41):
代码没测过,仅供参考。轻拍。

要是足够牛逼的话,可以手写一个AVL/SBT。用平衡树的性质做。(争取吓尿面试官(并不能

补充内容 (2015-9-30 09:51):
果然写错了
67行应该是: ans = max(ans, bitree.sum(u - 1));

楼下的兄弟:
如果treeset对应的是std::set的话,那就是不行的。迭代器之间的距离需要O(N)的时间。

我一小时只能发两帖,不能跟帖回复了,抱歉。

补充内容 (2015-9-30 10:53):
66行改成:int u = mp[nums[i]];

智商堪忧啊我擦
回复

使用道具 举报

🔗
mileschen2008 2015-9-30 05:44:49 | 只看该作者
全局:
第一题的题意不太懂,maximum totalpass感觉就是len-1啊,因为数组中最小值的totalpass最大,因为其他的len-1个数都大于它。如果理解错了,还希望楼主稍微再说明下题目,多谢啦。
回复

使用道具 举报

🔗
hanchen999 2015-9-30 05:54:38 | 只看该作者
全局:
这题看着怎么像segmenttree。。。第二问
回复

使用道具 举报

🔗
Linzertorte 2015-9-30 06:04:29 | 只看该作者
全局:
mileschen2008 发表于 2015-9-30 05:44
第一题的题意不太懂,maximum totalpass感觉就是len-1啊,因为数组中最小值的totalpass最大,因为其他的len ...

[1,1,1]是什么
回复

使用道具 举报

🔗
kelvinzhong 2015-9-30 06:41:10 | 只看该作者
全局:
BST估计是每一个点记录右子🌲点得数量
回复

使用道具 举报

🔗
mileschen2008 2015-9-30 06:42:33 | 只看该作者
全局:

嗯,是的,要考虑duplicates,但是这道题目也就是找min value,然后找比他大的就行。如果array已经sort,就O(logn),没sort O(n).
回复

使用道具 举报

🔗
kelvinzhong 2015-9-30 06:53:36 | 只看该作者
全局:
mileschen2008 发表于 2015-9-30 06:42
嗯,是的,要考虑duplicates,但是这道题目也就是找min value,然后找比他大的就行。如果array已经sort, ...

没sort的话可以O(n)解这题? 就算用BST也要O(nlogn)吧?
回复

使用道具 举报

🔗
mileschen2008 2015-9-30 07:16:37 | 只看该作者
全局:
kelvinzhong 发表于 2015-9-30 06:53
没sort的话可以O(n)解这题? 就算用BST也要O(nlogn)吧?

我说的第一问哈。第二问BST当然得O(nlogn)啦。
回复

使用道具 举报

🔗
guzi 2015-9-30 07:56:46 | 只看该作者
全局:
第一问像是Leetcode上的h-index问题
大概看了一下geeks for geeks 上关于第二问的解答,好长。。。确定是要在面试中全部写出来么? 感觉这一道题就可以用掉45分钟了。。PS: 没见过AVL的不就惨了?
回复

使用道具 举报

🔗
M_Jason 2015-9-30 08:53:46 | 只看该作者
全局:
感觉这道题的第二问好像可以用Stack来解决啊,还是需要先排序,从大到小排,然后还要用hash表存储好所有重复项的个数,接着向栈里面逐个压进去每一项,如果入栈的项的下标比栈顶的大,那么开始pop,直到栈顶的元素的下标比入栈项的小,这中间没pop出一个都可以计算出该项的leftpass值。说的有点儿晦涩,但是感觉确实可以用排序+栈来做!
回复

使用道具 举报

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

本版积分规则

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