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

热乎乎的Google Onsite面经

🔗
averillzheng 2015-5-1 02:10:23 | 只看该作者
全局:
bobingmm 发表于 2015-4-9 13:02
请问下第二轮第二道口袋题目,combine的最后是要combine成一个口袋是吗?

补充内容 (2015-4-9 13:05):

这个题应该用hauffman coding idea来搞。 因为要让cost最小,必须是的大的bag被合并的次数少。

补充内容 (2015-5-1 02:16):
我把题目看错了,是合并相邻的两个。这是经典的dp问题了。
回复

使用道具 举报

🔗
wangxinlei 2015-5-7 15:23:17 | 只看该作者
全局:
stochasticer 发表于 2015-4-8 17:10
问个很弱的问题。LZ的第一道题,我的思路和LZ基本一致,对给的每一个点BFS,然后最终扫描。写了一下code发 ...

用DFS不行么?感觉代码稍微简单点啊。。。

  1. void dfs(vector<vector<int>> &matrix, int pos, vector<bool> &visit,unordered_map<int, int> &map) {
  2.     int i = pos/matrix[0].size();
  3.     int j = pos%matrix[0].size();
  4.     if(visit[pos] == true)
  5.         return;
  6.     visit[pos] = true;
  7.     map[pos]++;
  8.     int val = matrix[i][j];
  9.     if(i && matrix[i-1][j] > val){
  10.         int tmp = (i-1)*matrix[0].size() + j;
  11.         dfs(matrix, tmp, visit,map);
  12.     }
  13.     if(j && matrix[i][j-1] > val){
  14.         int tmp = i*matrix[0].size() + j - 1;
  15.         dfs(matrix, tmp, visit,map);
  16.     }
  17.     if(i < matrix.size()-1 && matrix[i+1][j] > val){
  18.         int tmp = (i+1)*matrix[0].size() + j;
  19.         dfs(matrix, tmp, visit,map);
  20.     }
  21.     if(j < matrix[0].size()-1 && matrix[i][j+1] > val){
  22.         int tmp = (i)*matrix[0].size() + j + 1;
  23.         dfs(matrix, tmp, visit,map);
  24.     }
  25.     return;
  26. }
  27. int findhighest(vector<vector<int>> &matrix, vector<int> pts){
  28.     unordered_map<int,int> map;
  29.     int m = matrix.size();
  30.     int n = matrix[0].size();
  31.    
  32.     for(int k = 0; k < pts.size(); k++) {
  33.         vector<bool> visit(m*n, false);
  34.         dfs(matrix, pts[k],visit,map);
  35.     }
  36.     int num = 0;
  37.     int pos = 0;
  38.     for(auto it:map){
  39.         if(it.second == pts.size())
  40.             if(matrix[it.first/n][it.first%n] > num){
  41.                 num = matrix[it.first/n][it.first%n];
  42.                 pos = it.first;
  43.             }
  44.         
  45.     }
  46.     return pos;
  47. }

  48. int main(int argc, const char * argv[]) {
  49.     vector<vector<int>> num{{1, 5, 3, 2}, {9, 3, 8, 2}, {9, 4, 8, 9}, {0, 3, 2, 3}};
  50.     vector<int> pts{5,7, 14};
  51.     cout << findhighest(num, pts);
  52. }
复制代码
回复

使用道具 举报

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

本版积分规则

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