📣 Back to School开学季 - VIP通行证5折优惠!蓝莓、Offer多多同步优惠
楼主: bearcat001
跳转到指定楼层
上一主题 下一主题
收起左侧

Google 11月19号 实习面经 和 12月18号 旁观面经

🔗
 楼主| bearcat001 2015-12-26 14:10:08 | 只看该作者
全局:
隐隐野烟 发表于 2015-12-26 02:04
原数组先要sort吗?
比如原数组为[2,3,4,5,1]

面试时说可以认为是有序的
回复

使用道具 举报

🔗
xzcode 2015-12-26 23:12:51 | 只看该作者
全局:
bearcat001 发表于 2015-12-26 14:10
面试时说可以认为是有序的

多谢,刚码完题目。
回复

使用道具 举报

🔗
fatalme 2015-12-27 01:36:36 | 只看该作者
全局:
第一轮Q3怎么做?有efficient的解法吗?只想到递归。
回复

使用道具 举报

🔗
 楼主| bearcat001 2015-12-27 02:17:35 | 只看该作者
全局:
fatalme 发表于 2015-12-27 01:36
第一轮Q3怎么做?有efficient的解法吗?只想到递归。

我也是用递归解的,暂时没有想到更好的办法
回复

使用道具 举报

🔗
singku 2016-1-7 12:15:00 | 只看该作者
全局:
第一轮第三题 递归用backtrack可以的吧 然后把搜索过的子串记录下来
回复

使用道具 举报

🔗
singku 2016-1-7 12:46:41 | 只看该作者
全局:
  1. #include <iostream>
  2. #include <map>
  3. #include <vector>
  4. #include <list>
  5. #include <algorithm>
  6. #include <sstream>

  7. using namespace std;

  8. bool can_divide_x_kind(std::vector<int> input)
  9. {
  10.     std::map<int, int> htable;
  11.     for (int i = 0; i < input.size(); i++) {
  12.         htable[input[i]] ++;
  13.     }

  14.     std::map<int, int>::iterator it = htable.begin();
  15.     for (; it != htable.end(); it++) {
  16.         if (it->second < 2) {
  17.             return false;
  18.         }
  19.     }
  20. }

  21. bool can_divide_5straight(std::vector<int> input)
  22. {
  23.     std::map<int, int> htable;
  24.     for (int i = 0; i < input.size(); i++) {
  25.         htable[input[i]] ++;
  26.     }

  27.     while (htable.size() >= 5) {
  28.         std::map<int, int>::iterator it = htable.begin();

  29.         int val = it->first;
  30.         it->second--;
  31.         if (it->second == 0) {
  32.             htable.erase(it++);
  33.         } else {
  34.             it++;
  35.         }
  36.         for (int i = 0; i < 4; i++) {
  37.             int val1 = it->first;
  38.             if (val1 = val + 1) {
  39.                 it->second--;
  40.                 if (it->second == 0) {
  41.                     htable.erase(it++);
  42.                 } else {
  43.                     val = val1;
  44.                     it++;
  45.                 }
  46.             } else {
  47.                 return false;
  48.             }
  49.         }   
  50.     }

  51.     if (htable.size()) {
  52.         return false;
  53.     }
  54.     return true;
  55. }

  56. string list_to_string(std::list<int> list)
  57. {
  58.     ostringstream oss;
  59.     std::list<int>::iterator it = list.begin();
  60.     for (; it != list.end(); it++) {
  61.         oss << *it;
  62.     }
  63.     return oss.str();
  64. }

  65. int call = 0;
  66. int ret = 0;
  67. std::map<string, bool> memoized;
  68. bool can_divide_x_straight(std::list<int> input)
  69. {
  70.     call++;
  71.     string str = list_to_string(input);
  72.     if (memoized.count(str)) {
  73.         ret++;
  74.         return memoized[str];
  75.     }

  76.     if (input.size() <= 2) {
  77.         return false;
  78.     }

  79.     for (int i = 3; i <= input.size(); i++) {
  80.         
  81.         std::list<int> copy = input;
  82.         std::list<int>::iterator it = copy.begin();
  83.         std::list<int>::iterator it1;
  84.         bool impossible = false;
  85.         for (int j = 1; j <= i-1; j++) {
  86.             it1 = it;
  87.             while (*it1 == *it && it1 != copy.end()) {
  88.                 it1++;
  89.             }
  90.             if (it1 == copy.end()) {
  91.                 impossible = true;
  92.                 break;
  93.             }
  94.             if (*it1 != *it + 1) {
  95.                 impossible = true;
  96.                 break;
  97.             }
  98.             copy.erase(it);
  99.             it = it1;
  100.         }
  101.         if (impossible == true) {
  102.             continue;
  103.         }
  104.         copy.erase(it);
  105.         if (copy.size() == 0 || can_divide_x_straight(copy)) {
  106.             string str = list_to_string(input);
  107.             memoized[str] = true;
  108.             return true;
  109.         }
  110.     }
  111.     str = list_to_string(input);
  112.     memoized[str] = false;
  113.     return false;
  114. }

  115. bool comp(int i, int j) {
  116.     return i<j;
  117. }

  118. int main(void)
  119. {
  120.     int vec[] = {
  121.         1,1,2,2,3,3,4,4,5,5,5
  122.     };

  123.     std::vector<int> input(vec, vec + sizeof(vec)/sizeof(int));
  124.     std::sort(input.begin(), input.end(), comp);   

  125.     std::list<int> input1(vec, vec+ sizeof(vec)/sizeof(int));
  126.     std::sort(input.begin(), input.end(), comp);

  127.     if (can_divide_x_kind(input)) {
  128.         cout << "1_good" <<endl;
  129.     }

  130.     if (can_divide_5straight(input)) {
  131.         cout << "2_good" << endl;
  132.     }

  133.     if (can_divide_x_straight(input1)) {
  134.         cout << "3_good" << " " << call << " " << ret << endl;
  135.     } else {
  136.         cout << call << " " << ret << endl;
  137.     }
  138.     return 0;
  139. }
复制代码
回复

使用道具 举报

🔗
bobzhang2004 2016-1-15 00:10:45 | 只看该作者
全局:
deck的第三问是用back tracking吗
回复

使用道具 举报

🔗
 楼主| bearcat001 2016-1-15 00:45:28 | 只看该作者
全局:
bobzhang2004 发表于 2016-1-15 00:10
deck的第三问是用back tracking吗

我是这么做的~ 我同学突然搞了个用堆解的,感觉也可以
回复

使用道具 举报

🔗
bobzhang2004 2016-1-27 08:56:09 | 只看该作者
全局:
楼主可以说一下怎么设计的pivot table吗?
回复

使用道具 举报

🔗
 楼主| bearcat001 2016-1-27 08:57:34 | 只看该作者
全局:
bobzhang2004 发表于 2016-1-27 08:56
楼主可以说一下怎么设计的pivot table吗?

当时答的是用一个hashtable,key是两个字段名(用_分割),value是汇总信息
回复

使用道具 举报

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

本版积分规则

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