Problem
Given a 01 matrix M, find the longest line of consecutive one in the matrix. The line could be horizontal, vertical, diagonal or anti-diagonal.
Example:
Input:
[[0,1,1,0],
[0,1,1,0],
[0,0,0,1]]
Output: 3
Hint: The number of elements in the given matrix will not exceed 10,000.
Solution
class Solution {
public int longestLine(int[][] M) {
if (M == null || M.length == 0 || M[0].length == 0) return 0;
int max = 0, m = M.length, n = M[0].length;
int[] row = new int[m];
int[] col = new int[n];
int[] d = new int[m+n];
int[] ad = new int[m+n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (M[i][j] == 1) {
row[i]++;
col[j]++;
d[i+j]++;
ad[j-i+m]++;
max = Math.max(max, Math.max(row[i], col[j]));
max = Math.max(max, Math.max(d[i+j], ad[j-i+m]));
} else {
row[i] = 0;
col[j] = 0;
d[i+j] = 0;
ad[j-i+m] = 0;
}
}
}
return max;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。