由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 求教矩阵改零的问题 (转载)
相关主题
请教一道careercup 150上的题来一题
问一个careercup上的题目二叉树按列打印的最大问题是怎么定义列
Amazon onsite面经微软面试题
Apple第一轮电话面试matrix question
讨论:一个Google面经算法题请问讨论矩阵螺旋打印的链接
请教个题一道 Amazon DP题
请教G家onsite一道题Amazon algorithm question, google
search 一問 DFS也来一道矩阵题
相关话题的讨论汇总
话题: matrix话题: int话题: xzero话题: yzero话题: column
进入JobHunting版参与讨论
1 (共1页)
p****3
发帖数: 448
1
【 以下文字转载自 Programming 讨论区 】
发信人: pv3633 (pv3633), 信区: Programming
标 题: 求教矩阵改零的问题
发信站: BBS 未名空间站 (Sat May 25 12:04:34 2013, 美东)
就是遇到零就要行列都改成零的那题
只遍历一次,不用额外空间
我的想法是
遍历一次但是不包括最后一行最后一列
遇到[ij]为零时在最后一行最后一列做记号
最后遍历最后行和列把整行和列改成零
但最后一步是否使时间上大于O(n^2)
b*****g
发帖数: 145
2
我也只想到了你这个做法,同问不用辅助空间的做法。
另外你这个做法还是o(n~2)的,这个不怕
c**********e
发帖数: 58
3
这样的话,如何判断最后一行和最后一列的每个元素是否为零呢?如果先遍历最后一行
和最后一列,只要行和列中各有一个元素为零,最后一行和列就全为零了。如果先遍历
其他的行和列,假设本来最后一行和最后一列全是1,但是被设置标记后最后一行和最
后一列有零了,无法判断这个零是否是本来就是零还是标记后才是零,也就无法得出最
后一行和最后一列元素的正确值。
因此,我觉得此方法不太对。。。
这道题不用extra space 真的有方法可以做吗?求指教
w***y
发帖数: 6251
4
我看到的解法是, 遍历到第一个有0的行列, 用这个相应的行/列, 来保存需要清零
的行/列---不知道说清楚了没有, 反正这个行/列最后都是要清零的,值修改了
也没关系的,用完了最后清零这部分
c**********e
发帖数: 58
5
说的听清楚的,感觉你这个解法是对的。
Thanks

【在 w***y 的大作中提到】
: 我看到的解法是, 遍历到第一个有0的行列, 用这个相应的行/列, 来保存需要清零
: 的行/列---不知道说清楚了没有, 反正这个行/列最后都是要清零的,值修改了
: 也没关系的,用完了最后清零这部分

d******e
发帖数: 2265
6
你可以先处理第一行和第一列,如果有零,m[0][0] = 0;剩下的不变。
矩阵剩下的projected to 第一行和第一列
if (m[i][j] ==0)
{ m[0][j] =0; m[i][0] = 0; }
然后你真正填零的时候,倒着从n-1 到 0来遍历你的两个array.
然后所有的都不变,复杂度也不变。

【在 p****3 的大作中提到】
: 【 以下文字转载自 Programming 讨论区 】
: 发信人: pv3633 (pv3633), 信区: Programming
: 标 题: 求教矩阵改零的问题
: 发信站: BBS 未名空间站 (Sat May 25 12:04:34 2013, 美东)
: 就是遇到零就要行列都改成零的那题
: 只遍历一次,不用额外空间
: 我的想法是
: 遍历一次但是不包括最后一行最后一列
: 遇到[ij]为零时在最后一行最后一列做记号
: 最后遍历最后行和列把整行和列改成零

r*********n
发帖数: 4553
7
谁能把完整的题目发出来?
thx
r*****s
发帖数: 74
8
public void setZeroes(int[][] matrix) {
// Start typing your Java solution below
// DO NOT write main() function
boolean xZero = false, yZero = false;
int m = matrix.length, n = matrix[0].length;
// record first row.
for (int i = 0; i < n; i ++){
if (matrix[0][i] == 0){
xZero = true;
break;
}
}
// record first column.
for (int j = 0; j < m; j ++){
if (matrix[j][0] == 0){
yZero = true;
break;
}
}
// bubble each zero element
for (int i = 1; i < m; i++){
for (int j = 1; j < n; j++){
if (matrix[i][j] == 0){
matrix[0][j] = 0;
matrix[i][0] = 0;
}
}
}
// Row-wise.
for (int i = 1; i < m; i ++){
if (matrix[i][0] == 0){
for (int j = 1; j < n; j ++){
matrix[i][j] = 0;
}
}
}
// Column-wise.
for (int j = 1; j < n; j ++){
if (matrix[0][j] == 0){
for (int i = 1; i < m; i++){
matrix[i][j] = 0;
}
}
}
if (xZero){
for (int j = 0; j < n; j++){
matrix[0][j] = 0;
}
}
if (yZero){
for (int i = 0; i < m; i ++){
matrix[i][0] = 0;
}
}

}
M*******u
发帖数: 51
9
Space extra 1) O(N^2) 另开一个matrix 来存放有0的element 2) O(2N) 两个数组
存放有0的i和j
3) O(1) 第一个0的行和列存放将来有0的i和j

【在 w***y 的大作中提到】
: 我看到的解法是, 遍历到第一个有0的行列, 用这个相应的行/列, 来保存需要清零
: 的行/列---不知道说清楚了没有, 反正这个行/列最后都是要清零的,值修改了
: 也没关系的,用完了最后清零这部分

1 (共1页)
进入JobHunting版参与讨论
相关主题
也来一道矩阵题讨论:一个Google面经算法题
~~问两道AMAZON电面题请教个题
Print out all elements in a sorted matrix请教G家onsite一道题
求顺时针打印矩阵codesearch 一問 DFS
请教一道careercup 150上的题来一题
问一个careercup上的题目二叉树按列打印的最大问题是怎么定义列
Amazon onsite面经微软面试题
Apple第一轮电话面试matrix question
相关话题的讨论汇总
话题: matrix话题: int话题: xzero话题: yzero话题: column