[Leetcode] 562. Longest Line of Consecutive One in Matrix 解题报告
2017-12-24 09:41
513 查看
题目:
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:
Hint: The number of elements in the given matrix will not exceed 10,000.
思路:
没有什么好的技巧,逐行找,逐列找,然后正对角线找,反对角线找。算法的时间复杂度是O(mn),空间复杂度是O(1),其中m和n分别是矩阵的行个数和列个数。
代码:class Solution {
public:
int longestLine(vector<vector<int>>& M) {
if (M.empty() || M[0].empty()) {
return 0;
}
int m = M.size(), n = M[0].size();
int maxl = 0, hori = 0, vert = 0, inc = 0, desc = 0;
for (int i = 0; i < m; ++i) {
for (int j = 0, hori = 0; j < n; ++j) {
hori = M[i][j] ? hori + 1 : 0;
maxl = max(maxl, hori);
}
}
for (int j = 0; j < n; ++j) {
for (int i = 0, vert = 0; i < m; ++i) {
vert = M[i][j] ? vert + 1 : 0;
maxl = max(maxl, vert);
}
}
for (int k = 0; k < m + n; k++) {
int j = max(0, k - m), inc = 0;
for (int i = min(k, m - 1); i >= 0 && j < n; --i, ++j) {
inc = M[i][j] ? inc + 1 : 0;
maxl = max(maxl, inc);
}
j = max(0, k - m), desc = 0;
for (int i = max(m - 1 - k,
4000
0); i < m && j < n; ++i, ++j) {
desc = M[i][j] ? desc + 1 : 0;
maxl = max(maxl, desc);
}
}
return maxl;
}
};
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.
思路:
没有什么好的技巧,逐行找,逐列找,然后正对角线找,反对角线找。算法的时间复杂度是O(mn),空间复杂度是O(1),其中m和n分别是矩阵的行个数和列个数。
代码:class Solution {
public:
int longestLine(vector<vector<int>>& M) {
if (M.empty() || M[0].empty()) {
return 0;
}
int m = M.size(), n = M[0].size();
int maxl = 0, hori = 0, vert = 0, inc = 0, desc = 0;
for (int i = 0; i < m; ++i) {
for (int j = 0, hori = 0; j < n; ++j) {
hori = M[i][j] ? hori + 1 : 0;
maxl = max(maxl, hori);
}
}
for (int j = 0; j < n; ++j) {
for (int i = 0, vert = 0; i < m; ++i) {
vert = M[i][j] ? vert + 1 : 0;
maxl = max(maxl, vert);
}
}
for (int k = 0; k < m + n; k++) {
int j = max(0, k - m), inc = 0;
for (int i = min(k, m - 1); i >= 0 && j < n; --i, ++j) {
inc = M[i][j] ? inc + 1 : 0;
maxl = max(maxl, inc);
}
j = max(0, k - m), desc = 0;
for (int i = max(m - 1 - k,
4000
0); i < m && j < n; ++i, ++j) {
desc = M[i][j] ? desc + 1 : 0;
maxl = max(maxl, desc);
}
}
return maxl;
}
};
相关文章推荐
- LeetCode 562. Longest Line of Consecutive One in Matrix(java)
- LeetCode 562. Longest Line of Consecutive One in Matrix(在矩阵中最长的连续1)$
- [LeetCode] Longest Line of Consecutive One in Matrix 矩阵中最长的连续1
- LintCode:875. Longest Line of Consecutive One in Matrix
- Longest Line of Consecutive One in Matrix
- leetcode 378. Kth Smallest Element in a Sorted Matrix 解题报告
- 【LeetCode】Number of Segments in a String 解题报告
- leetcode 329. Longest Increasing Path in a Matrix 解题报告
- [leetcode] 329. Longest Increasing Path in a Matrix 解题报告
- [Leetcode] 600. Non-negative Integers without Consecutive Ones 解题报告
- [LeetCode]Number of Digit One,解题报告
- [Leetcode] 329. Longest Increasing Path in a Matrix 解题报告
- leetcode解题报告(14):Max Consecutive Ones
- LeetCode 421 Maximum XOR of Two Numbers in an Array 解题报告
- LeetCode-Number of Digit One-解题报告
- [leetcode] 378. Kth Smallest Element in a Sorted Matrix 解题报告
- [Leetcode] 378. Kth Smallest Element in a Sorted Matrix 解题报告
- [Leetcode] 485. Max Consecutive Ones 解题报告
- Leetcode 485. Max Consecutive Ones 最大连续1 解题报告
- 【LeetCode】Max Consecutive Ones 解题报告