题目:

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)

这里,考虑的是右下点是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 hereif(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;}
}

View Code

总耗时: 1978 ms

Python程序:

class Solution:#param matrix: a matrix of 0 and 1#return: an integerdef maxSquare(self, matrix):# write your code hereif matrix == None:return 0m = len(matrix)if m ==0:return 0n = 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])+1ans = max(ans,dp[i][j])return ans*ans

View Code

转载于:https://www.cnblogs.com/theskulls/p/4905851.html

lintcode:最大子正方形相关推荐

  1. lintcode 最大子数组III

    题目描述 给定一个整数数组和一个整数 k,找出 k 个不重叠子数组使得它们的和最大.每个子数组的数字在数组中的位置应该是连续的. 返回最大的和. 注意事项 子数组最少包含一个数 样例 给出数组 [-1 ...

  2. vijos 1057 盖房子 dp 最大子正方形

    P1057盖房子 未递交 标签:[显示标签] 描述 永恒の灵魂最近得到了面积为n*m的一大块土地(高兴ING^_^),他想在这块土地上建造一所房子,这个房子必须是正方形的. 但是,这块土地并非十全十美 ...

  3. hdu4846 最大子正方形(dp)

    题意:       给你一个图,让你找到最大的子矩形. 思路:       之前做过一个最大子矩阵,记得当时是用三种方法做的,两种都是瓶颈法,第三种是dp,结果今天的用瓶颈吧怎么都过不去,哎!不知道为 ...

  4. 【BZOJ-30391057】玉蟾宫棋盘制作 悬线法

    3039: 玉蟾宫 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 753  Solved: 444 [Submit][Status][Discuss] ...

  5. 【JZOJ6360】最大菱形和(rhombus)

    description analysis 容易想到把原矩阵翻转45°45°45°,然后每个数再用000隔开 然后就变成了求最大子正方形,求完二维前缀和之后就很好做了 code #pragma GCC ...

  6. 2020计算机保研经验贴:清华,复旦,上交,北航

    前言: 今天是10月17日,本来打算14号当天写的,但是因为最近事情比较多,就暂时搁置了. 从发出第一封联系导师的邮件(4月17日)到在系统中最终确定(10月14日)总共是180天. 原则:不直博 个 ...

  7. Codeforces713D(二维RMQ)

    区间最大子正方形问题. 预处理后二分答案验证 AC Code: #include<bits/stdc++.h> #define maxn 1005 #define lim 10 using ...

  8. 算法学习笔记(2) 悬线法

    本文属于「算法学习」系列文章之一.之前的[数据结构和算法设计]系列着重于基础的数据结构和算法设计课程的学习,与之不同的是,这一系列主要用来记录对大学课程范围之外的高级算法学习.优化与使用的过程,同时也 ...

  9. [CF480E]Parking Lot

    题意:给一个$n\times m$的网格,初始时有些地方不能选,给$k$个询问$(x,y)$,每次令$(x,y)$不能选,然后询问最大子正方形的边长 如果按原题来做,禁止选一个点对答案的影响是极其鬼畜 ...

最新文章

  1. 由单例模式学到:静态构造函数和静态字段
  2. 多目标分类的混淆矩阵_用于目标检测的混淆矩阵
  3. 使用javascript打开模态对话框
  4. 修复./mysql/proc
  5. JConsole的使用手册 JDK1.5(转)
  6. python剑指offer替换空格_《剑指offer》2-替换空格【Java+Python】
  7. Linux根据启动程序文件名称进行批量结束任务
  8. SQL:Incorrect string value: ‘\xC2\xA92021...‘ for column ‘site_copy‘ at row 1解决方案
  9. Arduino开发板使用DS3231实时时钟模块的方法
  10. 一文读懂PCB品质体系认证
  11. PHP本地文件包含漏洞环境搭建与利用
  12. matlab贝塔分布,怎么拟合贝塔分布函数
  13. 3dmax软件怎样一键取消视图背景网格
  14. javascript javascript面向对象的理解及简单的示例
  15. Moos-IvP 实验室7 Helm Autonomy 任务详解
  16. python运动目标绘制轨迹_实时轨迹绘制Matplotlib
  17. SQL语句(增删改查)
  18. 单元测试与E2E测试
  19. vscode龟速下载解决方法
  20. 影响中国发展的七大垂直搜索引擎!!

热门文章

  1. stackless python初体验
  2. 勒索软件损失2年增15倍 2017年可达50亿美元
  3. android 管理activity
  4. springmvc 项目完整示例05 日志 --log4j整合 配置 log4j属性设置 log4j 配置文件 log4j应用...
  5. SQL server 2012序列号 注册码 z
  6. 关于oracle的certview
  7. 刚刚做了一个菜单导航变亮的效果,共享一下吧!
  8. React组件复用的方式
  9. Vue中data为何以函数形式返回
  10. python执行shell脚本、执行mongodb_mongodb执行js脚本(一)---shell执行