leetcode221
int maximalSquare(vector<vector<char>>& matrix) {
int height=matrix.size();
if(height==)
return ;
int width=matrix[].size();
vector<vector<int>> vec(height,vector<int>(width,));
int result=;
for(int i=;i<height;i++)
{
for(int j=;j<width;j++)
{
if(matrix[i][j]=='')
{
vec[i][j]=;
if(i>&&j>)
vec[i][j]+=min(min(vec[i-][j],vec[i][j-]),vec[i-][j-]);
}
result=max(result,vec[i][j]);
}
}
return result*result; }
本题是动态规划的题目,vec[i,j]记录的是以matrix[i,j]为右下角的所能构成的正方形区域的边长的最大值。
递推公式,vec[i][j] = 1 + min(min(vec[i-1][j],vec[i][j-1]),vec[i-1][j-1]),计算的是当前单元格的“左”、“上”、“左上”三个单元格的最小值,再+1。
补充一个python的实现:注意i和j的值在matrix和dp中表示位置不同。
class Solution:
def maximalSquare(self, matrix: 'List[List[str]]') -> 'int':
m = len(matrix)
if m == :
return
n = len(matrix[])
dp = [[ for _ in range(n+)]for _ in range(m+)]
res =
for i in range(m):
for j in range(n):
if matrix[i][j] == '':
dp[i+][j+] = min(min(dp[i][j+],dp[i+][j]),dp[i][j]) +
res = max(res,dp[i+][j+])
return res * res
例如:对于输入测试样本,当遍历到红色的数字1时(i=2,j=3)
1 0 1 0 0
1 0 1 1 1
1 1 1 1
1 0 0 1 0
当i=2 j=3时,dp[3][4]的值是:dp[2][3]、dp[2][4]、dp[3][3]这三个位置的最小值1,再加上1。因此dp[3][4] = 1 + 1 = 2(即下图中的红色方框区域的计算)。
按照次递推公式计算,可得到如下二维数组dp:
leetcode221的更多相关文章
- [Swift]LeetCode221. 最大正方形 | Maximal Square
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and re ...
- [Leetcode221]最大面积 Maximal Square
[题目] Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's a ...
- leetcode221 Maximal Square
思路: dp. 实现: class Solution { public: int maximalSquare(vector<vector<char>>& matrix) ...
- Leetcode221. Maximal Square最大正方形
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 方法一 ...
- 我熬夜读完这份“高分宝典”,竟4面拿下字节跳动offer
前言 怎样的契机? 实际上,目前毕业已经两年时间了,在大学时就已经开始关注字节跳动的发展.一开始,我是电气自动化专业的,大二清楚目标之后就转计算机了,大四进了一家小型的互联网公司实习,具体就不说哪家了 ...
随机推荐
- 关于Java的特点之继承
继承--解决之道 继承可以解决代码复用,让我们的编程更加靠近人类思维.当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类(比如刚才的Student),在父类中定义这些相同的属性和方法,所 ...
- linux之安装软件,压缩解压文件
- 使用css时的一些技巧及注意事项
<!-- TITLE: 使用css时的一些技巧及注意事项 --> # CSS推荐书写顺序: 1. 位置属性(position, top, right, z-index, display, ...
- Python全栈之路---数据类型—字符串
字符串:有序的字符的集合,用于存储和表示基本的文本信息,一对单.双.或三引号中间包含的内容称之为字符串 1.特性:有序,不可变(开辟新地址存储字符串,python解释器会定期清空不用了的已存储的) & ...
- 百战程序员9- IO流
1.IO是什么意思? data source是什么意思? IO:输入输出 data source:数据源 2.字节流和字符流有什么区别?输入流和输出流有什么区别? 分类 3.节点流和处理流有什么区别? ...
- Python导入jar包
一.环境准备 1.Python 3.6 64位+jre 64位+win64位(jre和Python位数一致) 2.安装jpype,安装的时候输入 pip install jpype1 2.1安装提示e ...
- XML二
XML的语法要求: 1,XML文档必须有一个顶层元素,即文档元素,所有其他元素必须嵌入在文档元素中. 2,元素嵌套要正确,即如果一个元素在另一个元素中开始,那么必须在同一个元素中结束. 3,每个元素必 ...
- matplotlib.pyplot展示MNIST图片
import torch import torch.utils.data as Data import torchvision import torchvision.transforms as tra ...
- myelipse与maven结合配置
添加插件 指定maven中jar包默认仓库地址 maven中debug模式中断点关联不到项目代码的问题 解决方法参考文章:https://blog.csdn.net/urnot/article/det ...
- python 0,1行列问题
shape[0]-- 行 A.min(0) --A的按列最小值,生成一个行向量 >>> a = np.random.rand(3,3) >>> a array([[ ...