由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 一道 A9.com Search Team 的面经难题
相关主题
求最大submatrix sum2维matrix装水问题
amazon居然有这么难得phone interview question请教 rotate the image
Maximum Contiguous Subarray昨天面试的题目
两道找最大submatrix的题?请教一道CS常见题的解法
问个面试题一道 Amazon DP题
minimum path sum的滚动数组啥意思hackerrank weekly contest problem 2, How many Matrices
面试题:transpose a matrix in place问个 matrix 的问题 (CS)
贡献一个MS onsite面试题热腾腾g电面 已挂
相关话题的讨论汇总
话题: int话题: leftsum话题: matrix话题: integer话题: overallmax
进入JobHunting版参与讨论
1 (共1页)
s*******3
发帖数: 6
1
Given a matrix, each cell having only 0's or 1's, find the largest sub-
matrix with equal number of 0's and 1's in it.
求指导!
f*****u
发帖数: 308
2
这题目测应该用dp吧。回头写个代码看看。

【在 s*******3 的大作中提到】
: Given a matrix, each cell having only 0's or 1's, find the largest sub-
: matrix with equal number of 0's and 1's in it.
: 求指导!

C********e
发帖数: 492
3
暂时想到用dp,时间复杂度O((mn)^2)
求更好的算法。。

【在 s*******3 的大作中提到】
: Given a matrix, each cell having only 0's or 1's, find the largest sub-
: matrix with equal number of 0's and 1's in it.
: 求指导!

k*******a
发帖数: 433
4
每个元素是一个0或一个1,还是多个???
z*t
发帖数: 13
5
能到O(n*n*m)
跟二维矩阵地最大字段和类似, 先把问题简化到一维数组(x到y行拍扁成一行,也就是
a[col] = sum(m[i][col] for i in range(x,y)) )。a再做个前缀和 a[i] = sum(a[0:
i])
h = y-x+1 矩形的高度。
问题转化为 a[i] - a[j-1] = h*(i-j)/2 ==> a[i] = a[j+1] + h*(i-j)/2
随j递
增 递减 可用类似杨氏矩阵的搜索办法。
D*******r
发帖数: 2323
6
建一个同size的matrix,先把原matrix里的第一排和第一列copy到新matrix里。
然后其它各点,如果原matrix里是1,到新matrix里,就是1 + min(上方,左方,左斜
上方在新matrix里的值);如果原matrix里是0,就copy 0到新matrix里。
最后新matrix里最大的那个数,就是所要找的sub-matrix的右下角,这个数,就是
submatrix的size。
复杂度是n*n.

【在 s*******3 的大作中提到】
: Given a matrix, each cell having only 0's or 1's, find the largest sub-
: matrix with equal number of 0's and 1's in it.
: 求指导!

x********k
发帖数: 256
7
1 1
1 1
这个按你的算法对应的新矩阵是
1 1
1 2
吧?不知道理解的对不对。

【在 D*******r 的大作中提到】
: 建一个同size的matrix,先把原matrix里的第一排和第一列copy到新matrix里。
: 然后其它各点,如果原matrix里是1,到新matrix里,就是1 + min(上方,左方,左斜
: 上方在新matrix里的值);如果原matrix里是0,就copy 0到新matrix里。
: 最后新matrix里最大的那个数,就是所要找的sub-matrix的右下角,这个数,就是
: submatrix的size。
: 复杂度是n*n.

r****7
发帖数: 2282
8
http://www.geeksforgeeks.org/largest-subarray-with-equal-number

【在 s*******3 的大作中提到】
: Given a matrix, each cell having only 0's or 1's, find the largest sub-
: matrix with equal number of 0's and 1's in it.
: 求指导!

D*******r
发帖数: 2323
9
哦,把题目看偏了,以为是要找最大的全是1的sub-matrix,原来是要找最大的0和1数
目相等的sub-matrix。

【在 x********k 的大作中提到】
: 1 1
: 1 1
: 这个按你的算法对应的新矩阵是
: 1 1
: 1 2
: 吧?不知道理解的对不对。

s*******3
发帖数: 6
10
求问 “问题转化为 a[i] - a[j-1] = h*(i-j)/2 ==> a[i] = a[j+1] + h*(i-j)/2
随j递增递减,可用类似杨氏矩阵的搜索办法。”
转化为一维问题之后如何在O(M)时间内求出最大值。


0:

【在 z*t 的大作中提到】
: 能到O(n*n*m)
: 跟二维矩阵地最大字段和类似, 先把问题简化到一维数组(x到y行拍扁成一行,也就是
: a[col] = sum(m[i][col] for i in range(x,y)) )。a再做个前缀和 a[i] = sum(a[0:
: i])
: h = y-x+1 矩形的高度。
: 问题转化为 a[i] - a[j-1] = h*(i-j)/2 ==> a[i] = a[j+1] + h*(i-j)/2
: 随j递
: 增 递减 可用类似杨氏矩阵的搜索办法。

相关主题
minimum path sum的滚动数组啥意思2维matrix装水问题
面试题:transpose a matrix in place请教 rotate the image
贡献一个MS onsite面试题昨天面试的题目
进入JobHunting版参与讨论
p**p
发帖数: 742
11
我写的java code O(m*m*n) 实现:
本质上跟max sub-matrix sum 差不多,就是把二维问题转化为一维。
public int getSubMatrixWithEqual0And1(int[][] matrix) {
int m, n;
if(matrix == null || (m = matrix.length) == 0 || (n = matrix[0].
length) == 0) {
return 0;
}

int overallMax = 0;
for(int i = 0; i < m; i++) {
int[] rowSum = new int[n];
for(int j = i; j < m; j++) {
for(int k = 0; k < n; k++) {
rowSum[k] += matrix[j][k] == 0 ? -1 : 1;
}

int maxSofar = (j-i+1) * getMaxLenWithEqual0And1(rowSum);
if(maxSofar > overallMax) {
overallMax = maxSofar;
}
}
}
return overallMax;
}

private int getMaxLenWithEqual0And1(int[] arr) {
int n = arr.length;
int[] leftSum = new int[n];
Map map = new HashMap();
int max = 0;
for(int i = 0; i < n; i++) {
leftSum[i] = i == 0 ? arr[i] : leftSum[i-1]+arr[i];
if(leftSum[i] == 0) {
max = i+1;
}
if(map.containsKey(leftSum[i])) {
int len = i - map.get(leftSum[i]);
if(len > max) {
max = len;
}
} else {
map.put(leftSum[i], i);
}
}
return max;
}
C********e
发帖数: 492
12
为什么要leftSum[i] == leftSum[j] ?
这意味着i ~ j 之间都是0,并不是要找的subarray啊

【在 p**p 的大作中提到】
: 我写的java code O(m*m*n) 实现:
: 本质上跟max sub-matrix sum 差不多,就是把二维问题转化为一维。
: public int getSubMatrixWithEqual0And1(int[][] matrix) {
: int m, n;
: if(matrix == null || (m = matrix.length) == 0 || (n = matrix[0].
: length) == 0) {
: return 0;
: }
:
: int overallMax = 0;

T*****u
发帖数: 7103
13
这样的一个社区的必要非充分条件是boundary全部是1或者0,并且boundary不属于除了
这个社区的其他社区。并且这样的社区不是唯一的。照这个思路,先找boundary,然后
一个一个的submap排除试试?
p**p
发帖数: 742
14
Not sure how you got that from the code.
But the code is there, you probably should try to run it with your example.

【在 C********e 的大作中提到】
: 为什么要leftSum[i] == leftSum[j] ?
: 这意味着i ~ j 之间都是0,并不是要找的subarray啊

C********e
发帖数: 492
15
你的是对的,我看错了
另外,如果直接进行把你的函数getMaxLenWithEqual0And1()转换到二维,可以O(m * n
)实现,
空间复杂度升到O(m*n)

.

【在 p**p 的大作中提到】
: Not sure how you got that from the code.
: But the code is there, you probably should try to run it with your example.

1 (共1页)
进入JobHunting版参与讨论
相关主题
热腾腾g电面 已挂问个面试题
我也来问问LC的Maximal Rectangleminimum path sum的滚动数组啥意思
问两道facebook面试题面试题:transpose a matrix in place
F家面经贡献一个MS onsite面试题
求最大submatrix sum2维matrix装水问题
amazon居然有这么难得phone interview question请教 rotate the image
Maximum Contiguous Subarray昨天面试的题目
两道找最大submatrix的题?请教一道CS常见题的解法
相关话题的讨论汇总
话题: int话题: leftsum话题: matrix话题: integer话题: overallmax