【发布时间】:2017-12-09 19:37:10
【问题描述】:
给定一个只包含 0 和 1 的矩阵,并且对矩阵的每一行进行排序,请找出哪一行包含最多的 1。对于M*N矩阵,需要O(M+N)时间复杂度,需要O(1)空间复杂度。
例子
输入:
000000011111
000011111111
000000111111
000000000111
000000011111
000011111111
输出:
由于第 2 行和第 6 行都包含 8 个 1,因此输出为 [2,8],[6,8]。
我想出了一个解决方案:
public List<List<Integer>> mostOnes(int[][] a) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
for (int j = 0; j < a[0].length; j++) {
for (int i = 0; i < a.length; i++) {
if (a[i][j] == 1) {
List<Integer> res = new ArrayList<>();
res.add(i + 1);
res.add(a[0].length - j);
result.add(res);
}
}
if (result.size() != 0) break;
}
return result;
}
但是,它不是 O(M+N)。有没有人有其他解决方案?
【问题讨论】:
-
从第一行一直到右边。然后向左移动直到到达最后一个
1。将此存储为最大值,然后直接向下移动(相同的列位置)到下一行并重复。如果向下移动时不是1,请跳过该行。 -
也不是 O(1) 空间!
-
@YvesDaoust 这个是 O(1) 空间(正如你在下面的答案)
-
@javadba 他可能在谈论 op 的解决方案
-
@Sopel 啊好吧 - 我看到 @ljeabmreosn 评论说 是 O(1) - 以及正确的方法。