题目

在一个由 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版本)相关推荐

  1. 插入排序算法 java_排序算法实现-插入排序(Java版本)

    原标题:排序算法实现-插入排序(Java版本) 插入排序(英语:Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到 ...

  2. JAVA算法:走迷宫回溯算法设计(JAVA版本)

    JAVA算法:走迷宫回溯算法设计(JAVA版本) 迷宫数组 int[][] maze = {                 {0, 1, 0, 0, 0},                 {0, ...

  3. 算法------零钱兑换(Java版本)

    题目 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1.示例 1:输入: coins ...

  4. 算法----------快乐数 (Java版本)

    编写一个算法来判断一个数 n 是不是快乐数.「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1.如 ...

  5. CSDN蓝桥杯算法题——题解Java版本——切面条

    目录 题目:切面条 答案目标: 推导过程: 解析过程: 对照Java编码1: 对照Java编码2: 总结: 题目:切面条 一根高筋拉面,中间切一刀,可以得到2根面条. 如果先对折1次,中间切一刀,可以 ...

  6. 网易实习面经中的算法题(java版本含注释)

    目录 前言 7. 整数反转(中等) 9. 回文数(简单) 14. 最长公共前缀(简单) 20. 有效的括号(简单) 23. 合并K个升序链表(困难) 64. 最小路径和(中等) 103. 二叉树的锯齿 ...

  7. 算法------------完全平方数(Java版本)

    题目 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少.示例 1:输入: n = 12 输出: 3 解释: 12 ...

  8. 微博短链接的生成算法(Java版本)

    最近看到微博的短链接真是很火啊,新浪.腾讯.搜狐等微博网站都加入了短链接的功能.之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少.短链接的主要职责 ...

  9. java短链接原理_微博短链接的生成算法(Java版本)

    最近看到微博的短链接真是很火啊,新浪.腾讯.搜狐等微博网站都加入了短链接的功能.之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少.短链接的主要职责 ...

  10. 微博短链接的生成算法(Java 版本)

    最近看到微博的短链接真是很火啊,新浪.腾讯.搜狐等微博网站都加入了短链接的功能.之所以要是使用短链接,主要是因为微博只允许发140字,如果链接地址太长的话,那么发送的字数将大大减少.短链接的主要职责就 ...

最新文章

  1. 使用redis时遇到的问题
  2. 我的Java开发学习之旅------Java经典排序算法之希尔排序
  3. Gitlab 生成 swagger 文档
  4. [导入]通过简易的前台代码实现无限二级域名转向(来自无忧 biyuan老矣)
  5. android String.charAt的使用
  6. 【实战 Ids4】║ 控制台密码模式搭配Ocelot网关
  7. 用根因定位法,让运维效率再高一点!
  8. 【解决】-bash: ftp: command not found
  9. ERP软件的追加开发环节存在特殊价值
  10. Bootstrap网页模板
  11. 论docker中 CMD 与 ENTRYPOINT 的区别
  12. 全局异常捕捉用法解析
  13. 社工手段日益精进,MacOS和IOS系统还安全吗?
  14. Windows上免费轻量好用的软件(不定期更新)
  15. 适合长期电脑办公人群的养生小技巧
  16. python四边形转矩形_如何用PIL将矩形图像映射成四边形?
  17. 浅谈ThingJs之对象查询方法
  18. 正确简单地安装Tensorflow和Keras
  19. BIOS Setup设置方法
  20. 转义字符 lt; gt; 等等

热门文章

  1. python argparse库_python标准库之argparse
  2. python 删除文件-python 删除文件和读取文件
  3. LMDIF_函数源码
  4. 一种近似方法将场地坐标转为像素坐标
  5. redis 内存不足 排查_redis莫名数据被清问题排查记录
  6. 为了探究不同光照处理_浅谈中考物理实验探究易错题
  7. hive load data inpath 空目录_Hive内部表 | 每日五分钟学大数据
  8. 驰骋工作流引擎设计系列05 启动流程设计
  9. C#与java可以共用的DES加密解密
  10. Exchange日常管理之二十二:配置保留策略