lintcode 中等题:Maximal Square 最大子正方形
2015-10-25 19:41
330 查看
题目:
样例
For example, given the following matrix:
Return
解题:
给定一个二维01矩阵,从中找出最大的全1正方形,并返回其面积。这里的面积就等于正方形中的1的个数。
说明:
1.给的01矩阵行列不一定相等。
2.最大正方形显然是有许多小的正方形组合起来了。
思路:
最小正方形就是这点的值是1,次小的正方形坐标是:
这里,考虑的是右下点是1的时候,再考虑其他三个点的情况,当其他三个点也都是1的时候,当前点(i,j)的值加一,表示形成的正方形边长是 A(i,j) + 1。
若上面的小正方形是另外一个大正方形的一部分,在判断大正方形的(i,j)点的时候,只需考虑其他三个点是否是零,非零表示可以构成正方形,同时选取这三个点所在值得最小值+ 1 做我该大正方形的边长。
Java程序:
View Code
Maximal Square
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area.样例
For example, given the following matrix:
1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0
Return
4.
解题:
给定一个二维01矩阵,从中找出最大的全1正方形,并返回其面积。这里的面积就等于正方形中的1的个数。
说明:
1.给的01矩阵行列不一定相等。
2.最大正方形显然是有许多小的正方形组合起来了。
思路:
最小正方形就是这点的值是1,次小的正方形坐标是:
(i-1,j-1) | (i-1,j) |
(i,j-1) | (i,j) |
若上面的小正方形是另外一个大正方形的一部分,在判断大正方形的(i,j)点的时候,只需考虑其他三个点是否是零,非零表示可以构成正方形,同时选取这三个点所在值得最小值+ 1 做我该大正方形的边长。
Java程序:
class Solution: #param matrix: a matrix of 0 and 1 #return: an integer def maxSquare(self, matrix): # write your code here if matrix == None: return 0 m = len(matrix) if m ==0: return 0 n = len(matrix[0]) if n ==0: return 0 dp = [[0]*n for _ in range(m)] ans = 0 for i in range(m): for j in range(n): dp[i][j] = matrix[i][j] if i and j and dp[i][j]: dp[i][j] = min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1 ans = max(ans,dp[i][j]) return ans*ans
View Code
相关文章推荐
- 周赛 4 【kMP&&回文串】
- Struts2工作原理
- git:fatal: Not a git repository (or any of the parent directories): .git
- 杭电1017——A Mathematical Curiosity(简单题)
- 欢迎CSDN-markdown编辑
- 一个java程序员自学IOS开发之路(二)
- 事件驱动模型
- VC6.0的使用,工程的创建
- uft参数化
- hibernate 的hibernate.cfg.xml标准配置文档
- POJ-3320 Jessica's Reading Problem
- 从电路交换到分组交换——TDM、ATM
- BaseDaoImpl得到泛型化超类
- 周总结
- f2fs解析(五)什么叫做compacted summary
- 【Java基础】--Java容器剖析:Set、List、Map接口
- 参数化
- 正则表达式
- leetcode题目记录
- 自然数幂之和