判断一个点是否在矩形内部_leetcode 85 最大矩形(c++)

博客主要讨论如何解决LeetCode的85题,即在给定的二进制矩阵中找到只包含1的最大矩形面积。提出了三种不同的解决方案:动态规划、转化为柱状图问题以及通过寻找高度、左边界和右边界。动态规划方法通过维护一个二维dp矩阵记录连续'1'的长度,而柱状图方法则将矩阵转换为柱状图,应用84题的解法。第三种方法通过不断向上遍历寻找最大高度,扩展左右边界来计算面积。
摘要由CSDN通过智能技术生成

7847617d7ab090b1cf14c5f6c3a70f06.png

###题目

给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

  • ["1","0","1","0","0"]
  • ["1","0","1","1","1"]
  • ["1","1","1","1","1"]
  • ["1","0","0","1","0"]
  • 输出: 6

###思路

万物皆可动态规划,设置二维dp矩阵,其中dp[i][j]代表在第i行中包含第j个元素的最长的连续'1'的长度。例如[1,1,0,0,1,1,0,1],相应的dp矩阵的值为[1,2,0,0,1,2,0,1]。

下一步开始遍历整个矩阵,遍历每一个元素的同时更新dp,同时计算最大面积,最大面积的计算原理是这样的

  • 假设dp[i][j]的值为5,只考虑第i行且带上matrix[i][j]时能组成的最大矩阵面积为5,高为1,底为
  • 再考虑上i-1行且带上matrix[i-1][j],此情况下能组成的最大矩形的高为2,底为
  • 再考虑上i-1行且带上matrix[i-2][j],此情况下能组成的最大矩形的高为3,底为
  • 一直到第0行,此情况下的最大矩形的高为i+1,底为

通过上面的计算方式,考虑了所有的能够组成的矩形,那么matrix能够组成的最大矩形肯定会被计算一次,所以能够找出最大矩形面积,其实也算是暴力法,不过利用了dp数组保存下

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值