求最大正方形的边长
来源:互联网 发布:mysql增删改查实例 编辑:程序博客网 时间:2024/04/27 21:33
题干:先输入两个值,代表矩阵的宽和长,再依次输入矩阵中的值,只能是0或1,最后求矩阵中最大正方形的边长,该正方形里面要全是1。
如: 3 4
0 0 0 0
0 1 1 0
0 1 1 0
输出:2
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int M = sc.nextInt(); int N = sc.nextInt(); int[][] arr = new int[M][N]; boolean flag = false; for(int i=0; i<M; i++) { for(int j=0; j<N; j++) { arr[i][j] = sc.nextInt(); if(arr[i][j]==1){ flag = true; } } } if(!flag){ System.out.println(0); return; } int[] left = new int[N]; int[] right = new int[N]; int[] height = new int[N]; Arrays.fill(right, N-1); int maxLen = 1; for(int i=0; i<M; i++) { int l=0, r=N-1; for(int j=0; j<N; j++) { if(arr[i][j] == 1) { left[j] = Math.max(left[j], l); } else { left[j] = 0; l = j + 1; } } for(int j=0; j<N; j++) { if(arr[i][j] == 1) { height[j]++; } else { height[j] = 0; } } for(int j=N-1; j>=0; j--) { if(arr[i][j] == 1) { right[j] = Math.min(right[j], r); } else { right[j] = N-1; r = j - 1; } } for(int j=0; j<N; j++) { maxLen = Math.max(maxLen,Math.min(right[j]-left[j]+1,height[j])); } } System.out.println(maxLen); } }
0 0
- 求最大正方形的边长
- 求正方形的边长
- 正方形边长求面积
- 趣题:正方形的边长是多少?
- POJ2485 求最小生成树的最大边长度
- 种草莓 HNUST 1714(求正方形边长 DP)
- 华为机考 给你一个N*M的矩阵,每个位置的值是0或1,求一个面积最大的子矩阵,这个矩阵必须是一个正方形,且里面只能由1构成,输出最大的正方形边长。其中n,m<=400;
- 求全1的最大正方形的边长 和 全1的最大子矩阵的面积 和POJ 2559 最大直方图
- 读入边长 画出正方形
- 任意边长正方形
- DP---求给定矩阵中最大正方形的维度
- 找最大的正方形
- 最大的正方形
- 趣题:单位正方形内相互分离的两个小正方形,其边长和小于1
- 上传图片最大允许的边长Ueditor
- 输入边长,输出空心正方形
- HDU 4386 给出四条边长求最大面积
- Maximal Square 最大的正方形
- 浅析快速充电技术在智能手机的应用
- AppDelegate文件下各方法的用法:(应用程序挂起、复原与终止)
- Linux网络编程——无连接和面向连接协议的区别
- 通过cygwin安装openSSH
- 字符串指针
- 求最大正方形的边长
- DropdownList绑定信息
- spring3 mvc 配置
- 牛人博客网址收集
- linux awk命令详解
- uboot 详细注释讲解
- 后台html标签到前台显示错误问题
- Android 返回键的监听及处理
- 文件传输(小文件)