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
前言 怎样的契机? 实际上,目前毕业已经两年时间了,在大学时就已经开始关注字节跳动的发展.一开始,我是电气自动化专业的,大二清楚目标之后就转计算机了,大四进了一家小型的互联网公司实习,具体就不说哪家了 ...
随机推荐
- ubuntu 16.04 编译安装 trl8291cu系列 无线网卡驱动
1 先 下载git包 和相关编译工具 sudo apt-get update sudo apt-get install git linux-headers-generic build-essentia ...
- return 返回值的用法
#coding:utf-8 # (1)把数据返回到函数调用处 def func(): # return 1 # return "aaabb" return [1,2,3,4] re ...
- Exception,标准异常总结
常见异常种类:
- linux之创建用户
用户 useradd xxx 创建用户 默认是普通用户 useradd -u666 web 创建新用户 设置id号 groupadd -g 777 ...
- 网站文档模式总是以Quirks文档模式解析网站
<meta name="renderer" content="webkit"/> <meta http-equiv="X-UA-Co ...
- Flask+uwsgi+virtualenv环境配置
Linux系统版本: SLES12sp3 (阿里云) 1. 首先需要安装python-devel,否则后续安装会报错! rpm -qa|grep python-base 结果: python-base ...
- vue安装过程
我们3个安装参考的博客地址 http://blog.qianduanchina.cn/post/596c5bb27838a71273eb4da3 http://blog.csdn.net/unamat ...
- LeetCode - Word Subsets
We are given two arrays A and B of words. Each word is a string of lowercase letters. Now, say that ...
- .NET平台
.nat 是一种跨语言的平台 类跟对象回顾 由于对象归纳类 是归纳对象共性的过程 在类似的基础上 将状态和行为实体话为对象的过程称为实例话 只写属性 只包含set访问器 只读属性 只包含get ...
- jsp后台取出request请求头
请求发到a2这个servlet 在这个servlet中请求转发到index.jsp 在jsp中如下的java代码 Enumeration headernames=request.getHeaderNa ...