leetcode 221. 最大正方形
2024-09-04 14:58:43
题目描述:
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。
思路分析:
一道动态规划的题。由于是正方形,首先单一的‘1’即为最小的正方形,接下来需要考察其外围区域是否为1。具体来说,dp[i][j]表示包含该点的最大正方形的边长。同时不断去更新这个最大边长。这里的递推是从前向后,如dp[i][j]=1,那么需要看dp[i-1][j],dp[i][j-1]以及dp[i-1][j-1]三个部分,动态递推公式为dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1])+1,更新最大边长。需要注意两个边界,即第一行和第一列,直接判断01,赋值即可。
代码:
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
int row = matrix.size();
if(row == )
return ;
int col = matrix[].size();
vector<vector<int>> res(row, vector<int>(col, ));
int maxval = ;
for(int i=; i<row; i++)
{
res[i][] = matrix[i][]-'';
maxval = max(maxval, res[i][]);
}
for(int i=; i<col; i++)
{
res[][i] = matrix[][i]-'';
maxval = max(maxval, res[][i]);
}
for(int i=; i<row; i++)
{
for(int j=; j<col; j++)
{
if(matrix[i][j] == '')
res[i][j] = ;
else
{
res[i][j] = min(res[i-][j-], min(res[i-][j], res[i][j-]))+;
maxval = max(maxval, res[i][j]);
}
}
}
return maxval*maxval;
}
};
最新文章
- Mac下搭建git
- mysql 查询数据时按照A-Z顺序排序返回结果集
- HTTP1.0与HTTP1.1的区别
- HDU #5507 GT and Strings
- select2的基本用法
- [XML] ResourceManager一个操作Resource的帮助类 (转载)
- linux内核学习-建议路线
- Eclipse 将Java项目转为Dynamic web project
- Power(int base, int exponent) 函数实现
- 你好,C++(1)C++是什么?C++的“前世今生”
- Android ProgressBar实现加载进度条
- jquery 获取当前对象的id取巧验证的一种方法
- c++对象在lua层的生命周期与内容扩展
- JUnit单元测试遇到的问题及解决思路
- 爬虫scrapy的使用
- 每日英语:China Destroys Six Tons of Confiscated Ivory
- 【WEB前端系列之CSS】CSS3动画之Tranition
- Java中高级面试题整理
- MySQL数据库(二)
- hadoop01
热门文章
- javascript:void(0)的含义
- Vue Nginx反向代理配置 解决生产环境跨域
- Eclipse apk项目创建和项目构架
- Appium的测试简单流程
- AI的自学题库-竞赛-基础知识
- 【解决】修改 docker 容器时间与宿主机不同
- gitlab安装配置
- Show which git tag you are on?
- Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column &#39;org_mer_id&#39; in where clause is ambiguous
- CodeForces - 1037H: Security(SAM+线段树合并)