📣 独立日限时特惠: VIP通行证立减$68
楼主: mc422
跳转到指定楼层
上一主题 下一主题
收起左侧

Google电面,面经

🔗
Wizmann 2015-9-30 09:30:26 | 只看该作者
全局:
第一题:
  1. nums = map(int, raw_input().split())
  2. mini = min(nums)
  3. print len(filter(lambda x: x > mini, nums))
复制代码
回复

使用道具 举报

🔗
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]];

智商堪忧啊我擦
回复

使用道具 举报

🔗
readman 2015-9-30 09:45:56 | 只看该作者
全局:
Wizmann 发表于 2015-9-30 09:39
第二题:

补充内容 (2015-9-30 09:41):

第二题不能用treeset么
回复

使用道具 举报

🔗
mileschen2008 2015-9-30 10:15:51 | 只看该作者
全局:
readman 发表于 2015-9-30 09:45
第二题不能用treeset么

我觉得第二题可以用Java 的 TreeSet,TreeSet是Red-black bst。但是呢,有个限制条件是数组必须没有duplicates.
回复

使用道具 举报

🔗
readman 2015-9-30 10:34:56 | 只看该作者
全局:
mileschen2008 发表于 2015-9-30 10:15
我觉得第二题可以用Java 的 TreeSet,TreeSet是Red-black bst。但是呢,有个限制条件是数组必须没有dupli ...

有dup也可以, 弄个counter 最后减一下
回复

使用道具 举报

🔗
mileschen2008 2015-9-30 10:45:39 | 只看该作者
全局:
readman 发表于 2015-9-30 10:34
有dup也可以, 弄个counter 最后减一下

那这样的话,你得遍历每一个大于它的数了,这好像跟brute-force无异了。不知道我理解的对不对,你能不能稍微写个代码出来看看?
回复

使用道具 举报

🔗
65岁退休 2015-9-30 11:49:03 | 只看该作者
全局:
回复

使用道具 举报

🔗
mileschen2008 2015-9-30 12:02:28 | 只看该作者
全局:
65岁退休 发表于 2015-9-30 11:49
http://www.lintcode.com/en/problem/count-of-smaller-number-before-itself/
第二题是不是这个

面试要写个segment tree也是醉了。
回复

使用道具 举报

🔗
Wizmann 2015-9-30 14:23:31 | 只看该作者
全局:
mileschen2008 发表于 2015-9-30 12:02
面试要写个segment tree也是醉了。

蛤蛤

也可以写块状链表,不过也不会更简单。
回复

使用道具 举报

🔗
gp89757 2015-9-30 15:48:33 | 只看该作者
全局:
第二问就是求surpass吧,一般是用BIT或者merge sort吧 都是nlogn的 BST应该是类似的思路
回复

使用道具 举报

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

本版积分规则

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