文章目录

  • 题目描述
  • 思路 & 代码
    • 更新版

题目描述

  • 显而易见地可以用dp来写,问题在于如何考虑状态转移方程

思路 & 代码

  • 首先再加一层外墙,就不用边界判断了
  • maxSqure[i]:以当前格子为右下角的正方形,可达到的最大边长
  • 这是由左、上、左上三个格子的maxSqure来决定的(类似木桶短板)
  • 借用一下leetcode题解中 lzhlyle 大佬的图,这个0限制我没太理解,这里说说我的理解吧:
    三个图分别代表全部可能的三种情况:左上小了、上小了、左小了
    对于这三种情况,我们发现采取的值都遵循这个规律:直接取三者中最小的值即可
    由此可以得到状态转移方程(见代码)
class Solution {public int maximalSquare(char[][] matrix) {int m = matrix.length;int n = matrix[0].length;int maxSide = 0;// maxSqure[i][j]:以当前块为右下角,可构造成的最大正方形的边长// 默认给上、左加上一层初始化的0int[][] maxSqure = new int[m + 1][n + 1];for(int i = 1; i <= m; i++){for(int j = 1; j <= n; j++){if(matrix[i-1][j-1] == '1'){// 思考,可以分成上、左、左上三个格子分别为短板的情况,然后此时如何取得min值来得出“三者取最小”的情况maxSqure[i][j]=Math.min(Math.min(maxSqure[i-1][j-1],maxSqure[i-1][j]),maxSqure[i][j-1]) + 1;maxSide = Math.max(maxSqure[i][j], maxSide);}}}return maxSide * maxSide;}
}
  • 时间复杂度 O(m * n),空间复杂度 O(m * n)

更新版

class Solution {public int maximalSquare(char[][] matrix) {int[][] maxSquareSize = new int[matrix.length + 1][matrix[0].length + 1];int resSize = 0;for(int i = 1; i <= matrix.length; i++) {for(int j = 1; j <= matrix[0].length; j++) {if(matrix[i - 1][j - 1] == '1') {maxSquareSize[i][j] = Math.min(maxSquareSize[i - 1][j], maxSquareSize[i][j - 1]);maxSquareSize[i][j] = Math.min(maxSquareSize[i][j], maxSquareSize[i - 1][j - 1]);resSize = Math.max(resSize, ++maxSquareSize[i][j]);}}}return resSize * resSize;}
}

【LeetCode笔记】221. 最大正方形(Java、动态规划、思路题)相关推荐

  1. 【LeetCode笔记】238. 除自身以外数组的乘积(Java、思路题)

    文章目录 题目描述 思路 & 代码 更新版 题目描述 首先暴力二层循环肯定可以,然后先累乘整个数组,再用除法肯定也行. 但是很遗憾,两种做法都不满足题目说明. 思路 & 代码 O(n) ...

  2. [leetcode日记]221.最大正方形

    题目 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 ...

  3. leetcode 221. Maximal Square | 221. 最大正方形(优化的暴力解法+动态规划解法)

    题目 https://leetcode.com/problems/maximal-square/ 题解 方法1:最暴力解 O((m*n)^2) public class Solution {publi ...

  4. [LeetCode刷题笔记]714 - 买卖股票的最佳时机含手续费(C++/Python3/Java/动态规划/贪心)

    一.题目描述 给定一个整数数组 prices 和 整数 fee ,其中 prices[i] 表示第 i 天的股票价格,fee 代表了交易股票的手续费用. 你可以无限次地完成交易,但是你每笔交易都需要付 ...

  5. 【LeetCode笔记】198. 打家劫舍(Java、动态规划)

    文章目录 题目描述 思路 & 代码 更新版 题目描述 好家伙,真是一道不符合社会主义价值观的题目 不过我们还是要把这道题做了,而且还得用上动态规划 思路 & 代码 首先,不能打劫相邻 ...

  6. LeetCode Top 100 Liked Questions 221. Maximal Square (Java版; Medium)

    welcome to my blog LeetCode Top 100 Liked Questions 221. Maximal Square (Java版; Medium) 题目描述 Given a ...

  7. LeetCode—笔记—51、N皇后——递归回溯,个人思路,简单易懂

    LeetCode-笔记-51.N皇后--递归回溯,个人思路,简单易懂 51. N 皇后 n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整数 ...

  8. leetcode 375. Guess Number Higher or Lower II | 375. 猜数字大小 II(动态规划思路总结)

    题目 https://leetcode.com/problems/guess-number-higher-or-lower-ii/ 题解 首先,看了 Related Topics,知道这是个 dp 问 ...

  9. LeetCode—221. 最大正方形

    221. 最大正方形 题目描述: 在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积. 考察重点:动态规划 方法概括:二维矩阵中查询最大矩形 dp[i][j ...

  10. 学习笔记 - 动态规划做题思路

    目录 一 . 什么是动态规划? 二.什么问题能用动态规划? 三.动态规划思路 一 . 什么是动态规划? 上一篇文章已经讲了动态规划是什么,按我个人的理解来说 动态规划就是一种 将一个大问题分解为各个独 ...

最新文章

  1. Python使用matplotlib可视化多个时间序列数据、添加双Y轴、以显示具有不同尺度的时间序列数据(secondary y axis)
  2. linux php 如何停止,如何关闭linux
  3. 谈谈对Kafka Accumulator的理解
  4. 10个经典而简单的jQuery特效设计在线演示
  5. 基于matlab的点云重建与三角剖分
  6. linux加载虚拟sriov网卡,如何配置BroadCOM网卡的SR-IOV功能
  7. #{}和${}的区别是什么?
  8. c语言网页版在线编译器_C语言编译器IDEapp下载-C语言编译器IDE官方版下载v1.5.1 安卓版...
  9. Qt creator5.7 OpenCV249之图片灰度处理(含源码下载)
  10. bat 等待输入_bat-批量修改文件或者文件夹名称
  11. 下面对html描述正确的有多选题,YS - 《网页制作》复习题(多选题)
  12. Ubuntu操作-01 安装NVIDIA显卡驱动
  13. 【组合优化】旅行商问题Traveling Salesman Problem(TSP)-概述
  14. 国际贸易术语解释通则(DEQ 目的港码头交货(……指定目的港))
  15. 未来交通 | 中国二十城出行者“MaaS及共享出行体验”初探索
  16. windows10 更换密码
  17. 起诉传音,华为为何会对一张壁纸要价2000万?
  18. 高阳:我是黑客我怕谁
  19. IOS 图片点击放大不失真
  20. 移动IP的作用及意义

热门文章

  1. 欧氏空间内积定义_MP5:内积、外积、面积、Hermite内积、辛内积
  2. mysql事务嵌套 php_使用以下代码,MySQL中的PHP“嵌套”事务是否...
  3. ios请求头解决参数中文乱码_花了一天时间就解决了一个的请求头传参参数格式bug...
  4. IEEE选择和下载投稿期刊模板(LaTeX和Word)网站
  5. 实验四51单片机并口实验
  6. 《Pycharm操作和配置指南》这些不会,写Python肯定慢嘛
  7. PDF签名系列(1):PDF签名机制的漏洞分析
  8. 【itext学习之路】--6.将html转成pdf(解决中文不显示)
  9. linux 串口读取陀螺仪,stm32读取陀螺仪MPU6050发送数据到串口
  10. lisp语言画阿基米德线_【R语言】如何将照片快速转换为素描