lintcode:最大子正方形
题目:
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) |
这里,考虑的是右下点是1的时候,再考虑其他三个点的情况,当其他三个点也都是1的时候,当前点(i,j)的值加一,表示形成的正方形边长是 A(i,j) + 1。
若上面的小正方形是另外一个大正方形的一部分,在判断大正方形的(i,j)点的时候,只需考虑其他三个点是否是零,非零表示可以构成正方形,同时选取这三个点所在值得最小值+ 1 做我该大正方形的边长。
Java程序:
public class Solution {
/**
* @param matrix: a matrix of 0 and 1
* @return: an integer
*/
public int maxSquare(int[][] matrix) {
// write your code here
if(matrix==null)
return 0;
int m = matrix.length;
if(m ==0 )
return 0;
int n = matrix[0].length;
if( n==0 )
return 0;
int res = -1;
for(int i = 1;i<m;i++){
for(int j = 1;j<n;j++){
if(matrix[i][j]!=0 ){
matrix[i][j] = min3(matrix[i-1][j-1],matrix[i][j-1],matrix[i-1][j]) + 1;
}
res = Math.max(res,matrix[i][j]);
}
}
return res*res;
}
public int min3(int a ,int b,int c){
a = Math.min(a,b);
c = Math.min(a,c);
return c;
}
}
总耗时: 1978 ms
Python程序:
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
lintcode:最大子正方形的更多相关文章
- lintcode :最大子数组
题目: 最大子数组 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和. 样例 给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6 ...
- lintcode 最大子数组III
题目描述 给定一个整数数组和一个整数 k,找出 k 个不重叠子数组使得它们的和最大.每个子数组的数字在数组中的位置应该是连续的. 返回最大的和. 注意事项 子数组最少包含一个数 样例 给出数组 [-1 ...
- vijos 1057 盖房子 dp 最大子正方形
P1057盖房子 未递交 标签:[显示标签] 描述 永恒の灵魂最近得到了面积为n*m的一大块土地(高兴ING^_^),他想在这块土地上建造一所房子,这个房子必须是正方形的. 但是,这块土地并非十全十美 ...
- hdu4846 最大子正方形(dp)
题意: 给你一个图,让你找到最大的子矩形. 思路: 之前做过一个最大子矩阵,记得当时是用三种方法做的,两种都是瓶颈法,第三种是dp,结果今天的用瓶颈吧怎么都过不去,哎!不知道为 ...
- [洛谷P1169] [ZJOI2007] 棋盘制作 解题报告(悬线法+最大正方形)
题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个 8×8 大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳. 而我 ...
- 【BZOJ-3039&1057】玉蟾宫&棋盘制作 悬线法
3039: 玉蟾宫 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 753 Solved: 444[Submit][Status][Discuss] D ...
- 洛谷P1736 创意吃鱼法 dp
正解:dp 解题报告: 早就想写dp的题目辣!我发现我的dp好差啊QAQ所以看到列表的小朋友写dp的题目就跟着他们的步伐做下题好辣QwQ 这题的话没有那——么难,大概说下趴QwQ 首先说下题意 前面一 ...
- [CF480E]Parking Lot
题意:给一个$n\times m$的网格,初始时有些地方不能选,给$k$个询问$(x,y)$,每次令$(x,y)$不能选,然后询问最大子正方形的边长 如果按原题来做,禁止选一个点对答案的影响是极其鬼畜 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
随机推荐
- 预处理C#
1.什么是预处理 源代码指定了程序的定义.预处理(preprocessior directive)指令是指示编译器如何处理源代码.这里的预处理和C,C++里面的预处理是不一样的,在C,C++中有实际的 ...
- arguments.callee 调用函数自身用法----JSON.parse()和JSON.stringify()前端js数据转换json格式
arguments.callee 调用函数自身用法 arguments.callee 在哪一个函数中运行,它就代表哪个函数. 一般用在匿名函数中. 在匿名函数中有时会需要自己调用自己,但是由于是匿名函 ...
- JDK 动态代理实现原理
一.引言 Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象便能动态生成代理类.代理类会负责将所有方法的调用分派到委托对象上反射执行,在分派执行的过 ...
- 选项切换条--第三方开源--SHSegmentControl
SHSegmentControl在github上的项目主页地址:https://github.com/7heaven/SHSegmentControl SHSegmentControl使用简单,在xm ...
- CLR via C# 线程基础知识读书笔记
1.线程的开销 a.线程内核对象 b.线程环境块 c.用户模式栈(1MB) d.内核模式栈 f.DLL线程连接和线程分离通知 2.线程的优先级由进程优先级和线程优先级共同组成 3.进程中所有的前台线程 ...
- CentOS 6.4 安装搭建 Scrapy 0.22 环境
一.安装Python2.7.6 更新CentOS lib库文件 yum -y update 安装开发工具包 yum groupinstall -y development 安装扩展包 yum inst ...
- thinkpad t440p 解决无线网卡驱动
$ wget https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1239578/+attachment/4057550/+files/rtl_9 ...
- C语言文件函数
FILE *fp: 其中的FILE应该大写,它实际上是系统定义的一个结构,在stdio.h文件中.该结构中有文件名,文件状态,文件当前的读写信息等. fp是指向FILE结构的指针变量,通过fp可以找到 ...
- Bash 快捷键
生活在 Bash shell 中,熟记以下快捷键,将极大的提高你的命令行操作效率. 编辑命令 Ctrl + a :移到命令行首 Ctrl + e :移到命令行尾 Ctrl + f :按字符前移(右向 ...
- (菜鸟要飞系列)一,基于Asp.Net MVC5的后台管理系统(前言)
今天真是个郁闷的日子,因为老师两个星期前给我的一个任务,用递归算法将Oracle数据库中用户信息及权限显示在jquery-treeView上,网上虽然有大神写出了这类算法,但是不贴全部代码,真的很难跟 ...