一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 1197|回复: 7
收起左侧

一脸懵逼的M家 On campus

[复制链接] |试试Instant~ |关注本帖
clxy2008 发表于 2016-10-14 07:31:39 | 显示全部楼层 |阅读模式

2016(10-12月) 码农类 硕士 全职@Microsoft - 校园招聘会 - 校园招聘会 |Otherfresh grad应届毕业生

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

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
一脸懵逼

30分钟,先花10分钟问了问实习。然后给了一道题,

比如这样一个矩阵:

1     -4     3
2    -1      0
7    -2     -1
1     1       1

找出任意形状的最大部分,比如 这个矩阵就是     左边第一列加最下面一行(有问题,待会说)


然后他不让我做,先让我做一维的,就是那个maximum subarry ,这个秒写不解释。. From 1point 3acres bbs


然后问怎么做这个,我不会,就只能先说 如果是求submatrix,那么就是做prefix,然后用两层循环,每次再用一次一维的算法,但是如果是随意形状,我不会做,而且应该没法做吧,因为可以向各个方向跑,就算用bfs也不知道什么时候停止,因为可能碰到了负数,但是负数后紧接着是一个足够大的正数。

鏉ユ簮涓浜.涓夊垎鍦拌鍧.
然后我说,你给我的这个case 也不对啊, 最右边一列也要加进去啊,因为虽然碰到了 -1,但是别停啊,继续往上就有 0 和 3啊,这样也太难了吧。

她说对对对,我就是让你找我这道题哪里有错误。

反正我到现在还是很懵逼,只能求人品,求onsite了

另外别小纸条我,我没有权限,回复不了。。。


补充内容 (2016-10-26 07:02):
拿到onsite了

评分

2

查看全部评分

本帖被以下淘专辑推荐:

xiaozhuxiaozhu 发表于 2016-10-14 07:41:57 | 显示全部楼层
1     -4     3
2    -1      0
7    -2     -1
1     1       1

这个最大部分应该是 除去-4 -1 -2的剩下部分吧。
回复 支持 反对

使用道具 举报

 楼主| clxy2008 发表于 2016-10-14 07:54:14 | 显示全部楼层
xiaozhuxiaozhu 发表于 2016-10-14 07:41. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
1     -4     3
2    -1      0.1point3acres缃
7    -2     -1

嗯 这道题是的,可是如何找到是 -4 -1 -2 而不是 -4 -1 -2 -1这样的最小部分呢?而且这个case比较小,只不过把矩阵分成了3块(我假设符号一样的是一块) 如果分成很多块,并且互相之间隔开,如何确定是否正数块该加到一起呢?
回复 支持 反对

使用道具 举报

leoloe326 发表于 2016-10-14 08:47:15 | 显示全部楼层
如果计算max submatrix的话用DP的话是不是也可以?我大致估算了一下大概复杂度是O(n^4),lz你的方法能讲一下嘛?谢谢
回复 支持 反对

使用道具 举报

 楼主| clxy2008 发表于 2016-10-14 08:55:52 | 显示全部楼层
leoloe326 发表于 2016-10-14 08:47
如果计算max submatrix的话用DP的话是不是也可以?我大致估算了一下大概复杂度是O(n^4),lz你的方法能讲一 ...

计算submatrix就比较简单了,用的是prefix的思想

比如. from: 1point3acres.com/bbs

1     -4     3. visit 1point3acres.com for more.
2    -1      0
7    -2     -1

每一列都预存成prefix sum. 1point3acres.com/bbs
matrix[j] += i>0?matrix[i-1][j]:0.鐣欏璁哄潧-涓浜-涓夊垎鍦

这样用两层循环. 1point3acres.com/bbs
for(int i=0;i<m;i++)
for(int j=i;j<m;j++)
{
   for(int k=0;k<n;k++). Waral 鍗氬鏈夋洿澶氭枃绔,
      {
}
}

补充内容 (2016-10-14 08:58):
matrix[j] += i>0?matrix[i-1][j]:0

补充内容 (2016-10-14 08:59):
matrix[j] += i>0?matrix[i-1][j]:0
什么排版。。
回复 支持 反对

使用道具 举报

 楼主| clxy2008 发表于 2016-10-14 08:58:01 | 显示全部楼层
leoloe326 发表于 2016-10-14 08:47
如果计算max submatrix的话用DP的话是不是也可以?我大致估算了一下大概复杂度是O(n^4),lz你的方法能讲一 ...
. 鍥磋鎴戜滑@1point 3 acres
for(int i=0;i<m;i++). more info on 1point3acres.com
for(int j=i;j<m;j++)
{vector<int>temp;
   for(int k=0;k<n;k++)
      {
         temp.push_back(matrix[j][k] - i>0?matrix[i-1][k]:0);
}. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
   对每一个temp求一维最大值,当然这个temp可以优化掉,直接sum += (matrix[j][k] - i>0?matrix[i-1][k]:0);

}

复杂度是n^3
回复 支持 反对

使用道具 举报

leoloe326 发表于 2016-10-14 10:22:13 | 显示全部楼层
. 1point3acres.com/bbs
大概理解了一下,类似于先把每一列累加,然后对这个累加的数组做一维的max subarray计算,得到结果之后然后再从这个数组范围内选取上下边界得到最终的matrix?

有一个小问题就是如何证明这个子问题的最优解就是全局的最优解呢?
回复 支持 反对

使用道具 举报

emmajob 发表于 2016-11-1 08:13:39 | 显示全部楼层

我还是不太懂思路,这个到底是对于每一行算 max subarray 还是每一列?操作到底是什么样的呢?
谢谢
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-4 10:35

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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