关闭

经典算法题之Maximal Square

标签: 面试题动态规划
371人阅读 评论(0) 收藏 举报

前言

  
  Maximal Square是道非常有意思的算法题。它是一个典型的动态规划问题,同时也是2017京东面试题,2016华为机考题。

题目描述

  有一个n*m大小的矩阵,其元素值为0或者1,求这个矩阵中全有1组成的最大方块其大小。

输入描述

  每个输入包含一个测试用例。每个测试用例的第一行包含两个整数n(2<= n <= 50),m(2<= n <= 50),分别表示矩阵matrix的行数与列数。接下来的每一行是该矩阵的每一行元素,其取值为1或者0。

输出描述

  输出矩阵中全有1组成的最大方块的大小。

输入样例

4 6

1 1 0 1 1 1
0 1 1 1 1 1
1 1 0 1 1 1
1 1 0 0 1 1

输出样例

3


思路分析:

  本题为一个典型的动态规划问题,因此可以使用动态规划的思想进行。动态规划重要的一个特点是要复用子问题。

  假设以matrix[i][j]为右下顶点的最大方块的大小为dp[i][j]。那么dp[i][j]的计算否可以复用比其更小的子问题呢?不难想象,如果matrix[i][j]=0,那么dp[i][j]=0。当matrix[i][j]=1时,此时要考察dp[i-1][j-1],dp[i-1][j]及dp[i][j-1],这是由于以matrix[i][j]的为右下顶点的最大方块由上面三个位置决定,而且是木桶效应,由最小值所决定,即dp[i][j]=min{dp[i-1][j-1], dp[i-1][j], dp[i][j-1]} + 1。考虑到边界条件,可以得到最终的递归方程为:

dp[i][j]={matrix[i][j],if i=0 or j=0 or matrix[i][j]=0min{dp[i1][j1],dp[i1][j],dp[i][j1]+1},otherwise

  只需要找到最大的dp[i][j]值即得到最大方块的大小。整个算法的时间复杂度与空间复杂度均为O(n*m)。

具体实现代码(C++)

这里写图片描述




这里写图片描述

0
0
查看评论

leetcode 221: Maximal Square

leetcode 221: Maximal Square c++ python java
  • xudli
  • xudli
  • 2015-06-05 08:15
  • 10908

LeetCode(221) Maximal Square

题目:Given a 2D binary matrix filled with 0’s and 1’s, find the largest square containing all 1’s and return its area.For example, given the following m...
  • guanzhongshan
  • guanzhongshan
  • 2015-08-10 21:53
  • 484

221. Maximal Square | Java最短代码实现

原题链接:221. Maximal Square 【思路】 本题考查动态规划。我们知道当 maxtrix[i][j] = '1' 时,以 matrix[i][j] 为正方形右下角的边长,最多比以 matrix[i - 1][j]、matrix[i][j - 1]、matri...
  • happyaaaaaaaaaaa
  • happyaaaaaaaaaaa
  • 2016-03-24 10:20
  • 573

LeetCode221:Maximal Square

Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area. For example, given the ...
  • u012501459
  • u012501459
  • 2015-06-18 22:53
  • 1641

[leetcode] 221 Maximal Square(最大全1正方形 &动态规划)

当我们判断以某个点为正方形右下角时最大的正方形时,那它的上方,左方和左上方三个点也一定是某个正方形的右下角,否则该点为右下角的正方形最大就是它自己了。这是定性的判断,那具体的最大正方形边长呢?我们知道,该点为右下角的正方形的最大边长,最多比它的上方,左方和左上方为右下角的正方形的边长多1,最好的情况...
  • NK_test
  • NK_test
  • 2015-10-04 23:04
  • 4434

436.Maximal Square-最大正方形(中等题)

最大正方形 题目在一个二维01矩阵中找到全为1的最大正方形 样例1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 返回 4 题解定义相同大小的辅助数组res,且第一例和第一行元素与原数组相同。从res[1][1]开始,如果原数组matrix[i][j]为0则表...
  • Tri_Color_Flag
  • Tri_Color_Flag
  • 2016-11-19 13:25
  • 177

LeetCode OJ 之 Maximal Square (最大的正方形)

题目: Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area. For example, give...
  • u012243115
  • u012243115
  • 2015-08-22 10:36
  • 695

Maximal Square 最大的正方形

Maximal Square   Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area....
  • u012605629
  • u012605629
  • 2015-06-12 20:11
  • 360

leetcode之maximal square

题目: Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area. For example,...
  • luckyu1
  • luckyu1
  • 2016-03-29 11:11
  • 101

java一些经典算法题

·1 *求1!+2!+3!.....+30!的和 并用方法。 int a=1,b=30; qiuhe(a, b);*/ public class d501 { public static void main(String[] args) { qiuhe(1,30); } pu...
  • qq625315759
  • qq625315759
  • 2016-07-09 17:02
  • 458
    机器学习公众号

    关注微信公众号,专

    为机器学习入门者
    个人资料
    • 访问:230956次
    • 积分:4762
    • 等级:
    • 排名:第7226名
    • 原创:115篇
    • 转载:14篇
    • 译文:3篇
    • 评论:788条
    博客专栏
    最新评论