算法--------最大正方形(Java版本)
题目
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入: 1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0输出: 4
解决方法
动态规划:
思路:
定义dp[i][j]数组,dp[i][j]表示在matrix[i][j] 位置,能够形成正方形的最大边长。
对于每一个matrix[i][j] ,如果matrix[i][j] 等于0,那么这个位置能形成的最大正方向就是0.
如果matrix[i][j] 等于1,那么dp[i][j]的值,和其左上,左,上 三个位置的dp[i][j] 有关。
dp[i][j] = Min(dp[i-1][j]、dp[i][j-1]、dp[i-1][j-1]) + 1
该位置的值,等于左上,左,上 三个位置值里面最小值加1,加1是因为当前位置matrix[i][j] 等于1,那么这个位置的最大边长就是1,如果说其他三个位置都是1,那么能够形成最大的边长就是1+1 =2 ,如果有一个位置是0,那么就构不成正方向,就是0,这种情况下最大边长就是1+0 = 1.
class Solution {public int maximalSquare(char[][] matrix) {if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return 0;}int [][] dp = new int[matrix.length][matrix[0].length];int maxSide = 0;int cur = 0;for (int i = 0; i < dp.length; i++) {for (int j = 0; j < dp[0].length; j++) {cur = matrix[i][j] == '0' ? 0 : 1;if (cur == 1) {if (i == 0 || j == 0) {dp[i][j] = cur;}else {dp[i][j] = cur + Math.min(Math.min(dp[i -1][j],dp[i][j-1]),dp[i-1][j-1]);}maxSide = Math.max(maxSide,dp[i][j]);}}}// for (int[] ints : dp) {
// System.out.println(Arrays.toString(ints));
// }return maxSide * maxSide;}
}
算法--------最大正方形(Java版本)相关推荐
- 插入排序算法 java_排序算法实现-插入排序(Java版本)
原标题:排序算法实现-插入排序(Java版本) 插入排序(英语:Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到 ...
- JAVA算法:走迷宫回溯算法设计(JAVA版本)
JAVA算法:走迷宫回溯算法设计(JAVA版本) 迷宫数组 int[][] maze = { {0, 1, 0, 0, 0}, {0, ...
- 算法------零钱兑换(Java版本)
题目 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1.示例 1:输入: coins ...
- 算法----------快乐数 (Java版本)
编写一个算法来判断一个数 n 是不是快乐数.「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1.如 ...
- CSDN蓝桥杯算法题——题解Java版本——切面条
目录 题目:切面条 答案目标: 推导过程: 解析过程: 对照Java编码1: 对照Java编码2: 总结: 题目:切面条 一根高筋拉面,中间切一刀,可以得到2根面条. 如果先对折1次,中间切一刀,可以 ...
- 网易实习面经中的算法题(java版本含注释)
目录 前言 7. 整数反转(中等) 9. 回文数(简单) 14. 最长公共前缀(简单) 20. 有效的括号(简单) 23. 合并K个升序链表(困难) 64. 最小路径和(中等) 103. 二叉树的锯齿 ...
- 算法------------完全平方数(Java版本)
题目 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少.示例 1:输入: n = 12 输出: 3 解释: 12 ...
- 微博短链接的生成算法(Java版本)
最近看到微博的短链接真是很火啊,新浪.腾讯.搜狐等微博网站都加入了短链接的功能.之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少.短链接的主要职责 ...
- java短链接原理_微博短链接的生成算法(Java版本)
最近看到微博的短链接真是很火啊,新浪.腾讯.搜狐等微博网站都加入了短链接的功能.之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少.短链接的主要职责 ...
- 微博短链接的生成算法(Java 版本)
最近看到微博的短链接真是很火啊,新浪.腾讯.搜狐等微博网站都加入了短链接的功能.之所以要是使用短链接,主要是因为微博只允许发140字,如果链接地址太长的话,那么发送的字数将大大减少.短链接的主要职责就 ...
最新文章
- 使用redis时遇到的问题
- 我的Java开发学习之旅------Java经典排序算法之希尔排序
- Gitlab 生成 swagger 文档
- [导入]通过简易的前台代码实现无限二级域名转向(来自无忧 biyuan老矣)
- android String.charAt的使用
- 【实战 Ids4】║ 控制台密码模式搭配Ocelot网关
- 用根因定位法,让运维效率再高一点!
- 【解决】-bash: ftp: command not found
- ERP软件的追加开发环节存在特殊价值
- Bootstrap网页模板
- 论docker中 CMD 与 ENTRYPOINT 的区别
- 全局异常捕捉用法解析
- 社工手段日益精进,MacOS和IOS系统还安全吗?
- Windows上免费轻量好用的软件(不定期更新)
- 适合长期电脑办公人群的养生小技巧
- python四边形转矩形_如何用PIL将矩形图像映射成四边形?
- 浅谈ThingJs之对象查询方法
- 正确简单地安装Tensorflow和Keras
- BIOS Setup设置方法
- 转义字符 lt; gt; 等等
热门文章
- python argparse库_python标准库之argparse
- python 删除文件-python 删除文件和读取文件
- LMDIF_函数源码
- 一种近似方法将场地坐标转为像素坐标
- redis 内存不足 排查_redis莫名数据被清问题排查记录
- 为了探究不同光照处理_浅谈中考物理实验探究易错题
- hive load data inpath 空目录_Hive内部表 | 每日五分钟学大数据
- 驰骋工作流引擎设计系列05 启动流程设计
- C#与java可以共用的DES加密解密
- Exchange日常管理之二十二:配置保留策略