经典算法题之Maximal Square

原创 2017年09月04日 23:29:44

前言

  
  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++)

这里写图片描述




这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

CSDN修改资源分数值,取消0分,最低分为1分

搞不懂为什么,资源上传也不是网站提供的,为啥你默默的就把我们自己上传的资源需要下载的分值就给修改了呢?如果资源是你们的,你随意修改,可这并不是你们的,难道你就没有看到评论区大把的评论说的什么么?唉,利...

opencv源码阅读(1)

test

算法题 lintcode 434 Maximal Square

原题目如下: Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's...

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 ret...
  • djinsis
  • djinsis
  • 2016年03月17日 21:17
  • 102

白话经典算法系列之十 一道有趣的GOOGLE面试题

微博http://weibo.com/MoreWindows已开通,欢迎关注。最近在微博上看到一道有趣的GOOGLE面试题,见下图:文字版:一个大小为n的数组,里面的数都属于范围[0, n-1],有不...

经典算法题:无序整数数组中找第k大的数

经典问题:写一段程序,找出数组中第k大的数,输出数所在的位置。 【解法一】先排序,然后输出第k个位置上的数 我们先假设元素的数量不大,例如在几千个左右,在这种情况下,那我们就排序一下吧。在这里,快速...

Python的100道经典算法题

按照c语言的100道经典算法题,自己原创写的,就得是自己的练习题了 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位、十位、个位...

经典算法题09-字符串模式匹配KMP

一. 提问字符串模式匹配指的是,找出特定的字符串在一个较长的字符串中出现的位置。 有一个长字符串”ababcabababdc”,请问子串”babdc”出现的位置是哪里? 二. 思路在字符串模式匹配...

经典算法题06-最长子序列

一:作用 最长公共子序列的问题常用于解决字符串的相似度,是一个非常实用的算法,是基本功。 二:概念举个例子,cnblogs这个字符串中子序列有多少个呢?很显然有27个,比如其中的cb,cgs等等都...

【白话经典算法系列之十】 一道有趣的GOOGLE面试题

最近在微博上看到一道有趣的GOOGLE面试题,见下图: 文字版: 一个大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重复元素,找到至少一个重复元素,要求O(...
  • suifcd
  • suifcd
  • 2014年10月12日 22:32
  • 577
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:经典算法题之Maximal Square
举报原因:
原因补充:

(最多只允许输入30个字)