区块链技术博客
www.b2bchain.cn

562. 矩阵中最长的连续1线段

这篇文章主要介绍了562. 矩阵中最长的连续1线段,通过具体代码讲解8187并且分析了562. 矩阵中最长的连续1线段的详细步骤与相关技巧,需要的朋友可以参考下

本文实例讲述了562. 矩阵中最长的连续1线段。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/?p=8187。具体如下:

562. 矩阵中最长的连续1线段 

 class Solution {     public boolean overflow(int[][] M, int i, int j) {         return i < 0 || j < 0 || i >= M.length || j >= M[0].length;     }      //起始位置 转移方向     public int count(int[][] M, int i, int j, int direction_i, int direction_j) {         int ans = 0, cur = 0;         while (!overflow(M, i, j)) {             if (M[i][j] == 1) {                 ++cur;                 ans = Math.max(ans, cur);             } else {                 cur = 0;             }             i += direction_i;             j += direction_j;         }         return ans;     }      public int longestLine(int[][] M) {         if (M.length == 0)             return 0;         int ans = 0;         for (int i = 0; i != M.length; ++i) {             // 左边界为起点,向右             ans = Math.max(ans, count(M, i, 0, 0, 1));             // 左边界为起点,向右下             ans = Math.max(ans, count(M, i, 0, 1, 1));             // 右边界为起点,向左下             ans = Math.max(ans, count(M, i, M[0].length - 1, 1, -1));         }         for (int j = 0; j != M[0].length; ++j) {             // 上边界为起点,向下             ans = Math.max(ans, count(M, 0, j, 1, 0));             // 上边界为起点,向右下             ans = Math.max(ans, count(M, 0, j, 1, 1));             // 上边界为起点,向左下             ans = Math.max(ans, count(M, 0, j, 1, -1));         }         return ans;     } }   
 class Solution {     public int longestLine(int[][] M) {         if (M == null || M.length == 0 || M[0].length == 0)             return 0;         int ans = 0;         int[][] horizontal = new int[M.length][M[0].length];         int[][] vertical = new int[M.length][M[0].length];         int[][] diagonal = new int[M.length][M[0].length];         int[][] antidiagonal = new int[M.length][M[0].length];         for (int i = 0; i != M.length; ++i) {             for (int j = 0; j != M[0].length; ++j) {                 if (M[i][j] == 0) {                     horizontal[i][j] = 0;                     vertical[i][j] = 0;                     diagonal[i][j] = 0;                     antidiagonal[i][j] = 0;                 } else {                     horizontal[i][j] = j > 0 ? horizontal[i][j - 1] + 1 : 1;                     vertical[i][j] = i > 0 ? vertical[i - 1][j] + 1 : 1;                     diagonal[i][j] = i > 0 && j > 0 ? diagonal[i - 1][j - 1] + 1 : 1;                     antidiagonal[i][j] = i > 0 && j < M[0].length - 1 ? antidiagonal[i - 1][j + 1] + 1 : 1;                     ans = Math.max(ans, horizontal[i][j]);                     ans = Math.max(ans, vertical[i][j]);                     ans = Math.max(ans, diagonal[i][j]);                     ans = Math.max(ans, antidiagonal[i][j]);                 }             }         }         return ans;     } }   

 

本文地址https://www.b2bchain.cn/?p=8187

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 562. 矩阵中最长的连续1线段
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们