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

狗家电面

全局:

2020(10-12月) 码农类General 博士 全职@google - 内推 - 技术电面  | | WaitList | 应届毕业生

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

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

x
狗家电面,接通电话后简单的自我介绍之后,开始做题。
您好!
本帖隐藏的内容需要积分高于 150 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 150 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies



评分

参与人数 8大米 +14 收起 理由
yiliaobailiao + 2 给你点个赞!
StupidCorn + 1 给你点个赞!
JudasOK + 2 谢谢楼主,求run一个例子
钟瑾继 + 2 给你点个赞!
胖虎不能再飘了 + 2 很有用的信息!

查看全部评分


上一篇:贝宝 2020 SDE 新鲜店面
下一篇:Plao Alto Network 电面@security岗

本帖被以下淘专辑推荐:

  • · goog|主题: 90, 订阅: 13
  • · google|主题: 10, 订阅: 0
全局:
参考LC124写了一个O(m*n)的解,用楼主给的两个例子似乎都是对的

  1. int helper(vector<vector<int>>& matrix, vector<vector<bool>>& visited, int row, int col, int& res) {
  2.   int m = matrix.size(), n = matrix[0].size();
  3.   if (row < 0 || row >= m || col < 0 || col >= n || matrix[row][col] == 0 || visited[row][col]) return 0;
  4.   visited[row][col] = true;
  5.   int left = helper(matrix, visited, row, col - 1, res);
  6.   int right = helper(matrix, visited, row, col + 1, res);
  7.   int up = helper(matrix, visited, row - 1, col, res);
  8.   int down = helper(matrix, visited, row + 1, col, res);
  9.   vector<int> tmp = {left, right, up, down};
  10.   sort(tmp.begin(), tmp.end());
  11.   res = max(res, matrix[row][col] + tmp[3] + tmp[2]); // get the largest two directions
  12.   return matrix[row][col] + tmp[3];
  13. }

  14. int maxPath(vector<vector<int>>& matrix) {
  15.   int m = matrix.size(), n = matrix[0].size();
  16.   vector<vector<int>> connectedRegion(m, vector<int>(n, 0));
  17.   vector<vector<bool>> visited(m, vector<bool>(n, false));
  18.   int res = 0; // does not need to consider negative value
  19.   for (int i = 0; i < m; ++i) {
  20.     for (int j = 0; j < n; ++j) {
  21.       if (matrix[i][j] != 0 && !visited[i][j]) {
  22.         helper(matrix, visited, i, j, res);
  23.       }
  24.     }
  25.   }

  26.   return res;
  27. }

  28. int main(){
  29.   vector<vector<int>> test1 = { {5,4,1,3}, {1,0,1,0}, {3,0,0,4}, {0,1,2,0} };
  30.   assert(maxPath(test1) == 17);
  31.   vector<vector<int>> test2 = { {5,4,1,0}, {1,0,1,2}, {3,0,0,4}, {0,1,2,0} };
  32.   assert(maxPath(test2) == 21);
  33.   return 0;
  34. }
复制代码
回复

使用道具 举报

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

评分

参与人数 1大米 +1 收起 理由
savage811 + 1 感谢

查看全部评分

回复

使用道具 举报

全局:
关建在于没有环, 没有环 可以视为一个tree, 所以就是max tree path sum即可.
回复

使用道具 举报

🔗
 楼主| jjames 2019-9-27 06:52:24 | 只看该作者
本楼:
全局:
求大米!
回复

使用道具 举报

全局:
码了。挺难的,没思路看起来。
回复

使用道具 举报

🔗
虎蝇孑 2019-9-27 07:06:34 | 只看该作者
全局:
求问楼主,
[1,2,3]
[4,0,5]
[6,7,8] 比如这个的话最大path就是环形走一遍得到1+2+。。。+8么?所以path终止条件就是碰到上下左右的情况如果都是1。出界 2。碰到0 3。已经走过的数,碰到这三种就停止,算是得到了一条路径是么?
已经加米,谢谢楼主。
回复

使用道具 举报

🔗
 楼主| jjames 2019-9-27 07:12:15 | 只看该作者
全局:
虎蝇孑 发表于 2019-9-27 07:06
求问楼主,
[1,2,3]
[4,0,5]

题目条件是不会形成环,你给的例子跟条件不符合。

我觉得应该是先找到connected component, 然后在里面找maximum path sum,结束之后依然不会做。
回复

使用道具 举报

🔗
crlyw 2019-9-27 07:24:38 | 只看该作者
全局:
看起来很像求一个hamilton路径,也就是路过可能的所有数,有且仅有一次,不同的地方在于,这题是求值的,而且没有终止点
回复

使用道具 举报

全局:
是不是用DFS就能做?每个值遍历一遍
回复

使用道具 举报

全局:
求hamilton图,似乎只能暴力搜索
回复

使用道具 举报

🔗
savage811 2019-9-27 07:46:49 | 只看该作者
全局:
本帖最后由 savage811 于 2019-9-27 07:56 编辑

马一下。有点难。第一反应也是,相当于被0分割出多个孤岛,每个孤岛元素求和。。但是这样就不能保证路径了。。
感觉dfs + backtrack
回复

使用道具 举报

全局:
把matrix看成undirected graph, 找Maximum path sum? 用DFS走,走過的點就設成visited
回复

使用道具 举报

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

本版积分规则

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