前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 562. 矩阵中最长的连续1线段(DP)

LeetCode 562. 矩阵中最长的连续1线段(DP)

作者头像
Michael阿明
发布2020-07-13 14:40:14
7880
发布2020-07-13 14:40:14
举报

1. 题目

给定一个01矩阵 M,找到矩阵中最长的连续1线段。 这条线段可以是水平的、垂直的、对角线的或者反对角线的。

代码语言:javascript
复制
示例:
输入:
[[0,1,1,0],
 [0,1,1,0],
 [0,0,0,1]]
输出: 3
提示: 给定矩阵中的元素数量不会超过 10,000。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-line-of-consecutive-one-in-matrix 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 建立四个方向的DP数组即可,求各方向的前缀和,遇到0从新开始累计
代码语言:javascript
复制
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(), i, j;
        vector<vector<int>> h(m,vector<int>(n,0)),
        	v(m,vector<int>(n,0)), p_45(m,vector<int>(n,0)),
        	n_45(m,vector<int>(n,0));
    	int maxlen = 0;
    	for(i = 0; i < m; i++) 
    	{
    		for(j = 0; j < n; j++)
    		{
    			if(M[i][j] == 0)
    				continue;
    			h[i][j] = i-1>=0 ? h[i-1][j]+1 : 1;
    			v[i][j] = j-1>=0 ? v[i][j-1]+1 : 1;
    			p_45[i][j] = (i>0 && j+1 <n) ? p_45[i-1][j+1]+1 : 1;
    			n_45[i][j] = (i>0 && j>0) ? n_45[i-1][j-1]+1 : 1;
    			maxlen = max(maxlen,h[i][j]);
    			maxlen = max(maxlen,v[i][j]);
    			maxlen = max(maxlen,p_45[i][j]);
    			maxlen = max(maxlen,n_45[i][j]);
    		}
    	}
    	return maxlen;
    }
};

120 ms 28.3 MB

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档