welcome to my blog

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

题目描述

Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area.Example:Input: 1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0Output: 4
class Solution {public int maximalSquare(char[][] matrix) {if(matrix.length==0 || matrix[0].length==0){return 0;}int n = matrix.length, m = matrix[0].length;// dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1]);int[][] dp = new int[n][m];int res = matrix[0][0]-'0';for(int i=0; i<n; i++){dp[i][0] = matrix[i][0]-'0';res = Math.max(res, dp[i][0]);}for(int j=0; j<m; j++){dp[0][j] = matrix[0][j]-'0';res = Math.max(res, dp[0][j]);}for(int i=1; i<n; i++){for(int j=1; j<m; j++){if(matrix[i][j]=='1'){dp[i][j] = 1 + Math.min(dp[i-1][j], Math.min(dp[i][j-1], dp[i-1][j-1]));res = Math.max(res, dp[i][j]*dp[i][j]);}}}return res;}
}

第一次做; 暴力法; 矩阵类型的题目要会暴力法!; 核心:每次扩张一个直角, 看注释

执行用时 :5 ms, 在所有 Java 提交中击败了99.20%的用户
内存消耗 :40.4 MB, 在所有 Java 提交中击败了95.65%的用户
/*
矩阵的题目, 暴力方法需要掌握, 最核心的就是要看懂下面这个矩阵, 这就是扩张方式!!!!!都次都扩张一个直角
12345
22345
33345
44445
55555
假设矩阵某一点是'1', 以该点作为正方形的左上角, 开始扩张, 一层一层地扩张, 就像上面写的一样, 同一个数字代表一层
*/
class Solution {public int maximalSquare(char[][] matrix) {if(matrix==null || matrix.length==0 || matrix[0].length==0)return 0;int rows = matrix.length, cols = matrix[0].length;int max = 0;for(int i=0; i<rows; i++){for(int j=0; j<cols; j++){if(matrix[i][j]=='1'){int curr = expand(matrix, i, j);max = Math.max(curr, max);}}}return max*max;}public int expand(char[][] matrix, int i, int j){//能进入这个函数, 说明matrix[i][j]=='1', 所以正方形的边长至少是1int len = 1;//a表示当前要探索的边长, 最因为a不合格跳出循环, 所以最大扩张长度是a-1, 令len=len+a-1即可int a = 1;//向右下方探索更大的正方形, 核心: 注意从哪一行向右探索, 看最上面注释的例子boolean flag = true;while(isValid(matrix, i+a, j) && isValid(matrix, i, j+a)){//从底下向右探索; 不满足条件要将flag置为false再breakfor(int m=j; m<=j+a ; m++){if(matrix[i+a][m] == '0'){flag = false;break;}}//从上面向下探索; 不满足条件要将flag置为false再breakfor(int m=i; m<=i+a && flag; m++){if(matrix[m][j+a]=='0'){flag = false;break;}                    }if(flag==false)break;//updatea++;}return len+a-1;}public boolean isValid(char[][] matrix, int i, int j){return i>=0 && i<matrix.length && j>=0 && j<matrix[0].length;}
}

第一次做; 动态规划, 搞明白扩张方式后再理解动态规划都不那么难了, 所以说暴力法是非常重要的, 先学会走再学会跑;回想LeetCode84和85题


LeetCode Top 100 Liked Questions 221. Maximal Square (Java版; Medium)相关推荐

  1. LeetCode面试常见100题( TOP 100 Liked Questions)

    这篇文章是关于LeetCode Top 100 Liked Questions 的 专栏记录,其中部分题目可能包括解题思路和多种优化解法.我把自己的思路都记录在这里,如果你看见了,请记得点个赞吧,蟹蟹 ...

  2. LeetCode Top 100 Liked 点赞最高的 100 道算法题

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:刷题顺序,刷题路径,好题,top100,怎么刷题,Leet ...

  3. leetcode: Largest Rectangle in Histogram,Maximal Square,Maximal Square问题

    Largest Rectangle问题 题目描述 Given n non-negative integers representing the histogram's bar height where ...

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

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

  5. LeetCode 221. Maximal Square (最大正方形)

    原题 Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and ...

  6. [leetcode ]221. Maximal Square c语言

    题目: Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ...

  7. 【LeetCode从零单排】No221.Maximal Square

    题目 Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ...

  8. 【leetcode刷题】 64.数组的度——Java版

    ⭐欢迎订阅<leetcode>专栏,每日一题,每天进步⭐ 看明白了就不难,总结一下就是要找出数组的众数,并且还有找出众数在数组中第一次出现和最后一次出现的位置,两个位置组成区间长度就是答案 ...

  9. LeetCode算法题17:电话号码的字母组合(Java版)

    LeetCode传送门:电话号码的字母组合 题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: ...

最新文章

  1. Java长见到的面试题,看你能答出几题,就知道自己有多菜了
  2. kdj买卖指标公式源码_“点金主图+副图+KDJ排序指标”公式源码
  3. 如何去除C#Strings中的空格?
  4. wine应用运行后字体都是问号
  5. .NET Core实战项目之CMS 第十五章 各层联动工作实现增删改查业务
  6. 【动态规划】最大子矩阵之和
  7. C语言 | 语句概述
  8. Go并发模式:管道与取消
  9. 纸质办公电子化——iWebOffice中间件
  10. 花了两万块参加培训,简历投了1000多份,两个月了还是没找到工作
  11. 服务器数据库维护需要做哪些,数据库运维究竟需要做什么?
  12. 【机器学习-白板推导系列】学习笔记---支持向量机和主成分分析法
  13. 泰拉瑞亚服务器config修改,泰拉瑞亚种子世界游戏配置修改教程
  14. 6-1 哈夫曼树及哈夫曼编码分数
  15. Docker Engine 安装时遇到的坑
  16. ElasticSearch 学习笔记(一)
  17. 女孩子录取了计算机类,苏州中学小女生录取藤校康奈尔工程计算机专业!看介绍,学攻略!...
  18. LVS的NAT、TUNNEL、Full-NAT模式
  19. [BUUCTF-pwn] wdb_2018_semifinal_pwn2
  20. 使用telnet登录服务器

热门文章

  1. 推箱子更新版(模块化)
  2. 通俗的计算机网络通信的软文——转载知乎
  3. Prouteus 定时中断 控制流水灯的实现
  4. 基于go-micro微服务的实战-实现网关Gateway(三)
  5. verilog 定义位宽为1的_Verilog中宏定义位宽带来的问题
  6. 自学java,如何快速地找到工作
  7. 打印 上一主题 下一主题 利用cURL实现单个文件分多段同时下载,支持断点续传(修订版)...
  8. 2022-2028年中国工业机械臂行业发展模式分析及投资趋势预测报告
  9. ReLayNet: Retinal Layer and Fluid Segmentation of Macular Optical Coherence Tomography using Fully C
  10. 哄女友开心系列,图片拼图