最大m子段和动态规划_动态规划解决最大正方形问题

今天的问题

2a052fed33e48f566f3fb0ae8e57d299.png

在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。

示例:

输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4

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

思路

同样,这种问题,也是由动态规划解决,题目中要求我们求解最大的正方形,那么,很显然可以想到,每一个正方形,都是由更小的正方形组成的。

但是本题还不能这么解,因为大的正方形,如果求出所有小的正方形,也是复杂度相当高的过程。

我们可以换个思路,

  1. 针对某一个点A,坐标为 (i,j),假设此点为我们要求的正方形的右下角的点,那么,我们只需要计算出这个点的最大边长,即可得出最大面积;
  2. 如何计算出最大边长呢,我们需要考虑一个问题,假如A点为我们最终需要的点,那么,显然以下三个点,也必须是1,分别为 (i-1, j), (i, j-1), (i-1,j-1),即A点的左/上/左上,三点
  3. 同时还要明确A点的最大边长,不可能超过上述三点位置的最小值加一,此条可能不太容易理解。假如(i-1,j)=2,(i-1,j-1)=4,那么,对于点A,横向的宽度,最多也就(2+1)
  4. 所以我们只需要取,三个点的最小值再加一,即可得到当前点的最大边长。

具体实现,见代码,整体思路清楚之后,实现起来就是很easy的事了

后记

大佬们动动手指赏个star https://github.com/severalfly/leetcode-leon

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值