[Leedcode][JAVA][第85题][第221题][最大正方形][动态规划]

【问题描述】[第221题][最大正方形][中等]

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

【解答思路】

1. 长方形 暴力

时间复杂度:O(N^2) 空间复杂度:O(N^2)
在这里插入图片描述
在这里插入图片描述

public int maximalRectangle(char[][] matrix) {if (matrix.length == 0) {return 0;}//保存以当前数字结尾的连续 1 的个数int[][] width = new int[matrix.length][matrix[0].length];int maxArea = 0;//遍历每一行for (int row = 0; row < matrix.length; row++) {for (int col = 0; col < matrix[0].length; col++) {//更新 widthif (matrix[row][col] == '1') {if (col == 0) {width[row][col] = 1;} else {width[row][col] = width[row][col - 1] + 1;}} else {width[row][col] = 0;}//记录所有行中最小的数int minWidth = width[row][col];//向上扩展行for (int up_row = row; up_row >= 0; up_row--) {int height = row - up_row + 1;//找最小的数作为矩阵的宽minWidth = Math.min(minWidth, width[up_row][col]);//更新面积maxArea = Math.max(maxArea, height * minWidth);}}}return maxArea;
}
2. 正方形 暴力
  • 正方形的面积是边长乘边长, maxArea 是没有意义的-- 只记录最大边长即可。然后是其它细节的修改,让代码更简洁,代码如下。
    时间复杂度:O(N^2) 空间复杂度:O(N^2)
public int maximalSquare(char[][] matrix) {if (matrix.length == 0) {return 0;}// 保存以当前数字结尾的连续 1 的个数int[][] width = new int[matrix.length][matrix[0].length];// 记录最大边长int maxSide = 0;// 遍历每一行for (int row = 0; row < matrix.length; row++) {for (int col = 0; col < matrix[0].length; col++) {// 更新 widthif (matrix[row][col] == '1') {if (col == 0) {width[row][col] = 1;} else {width[row][col] = width[row][col - 1] + 1;}} else {width[row][col] = 0;}// 当前点作为正方形的右下角进行扩展int curWidth = width[row][col];// 向上扩展行for (int up_row = row; up_row >= 0; up_row--) {int height = row - up_row + 1;if (width[up_row][col] <= maxSide || height > curWidth) {break;}maxSide = Math.max(height, maxSide);}}}return maxSide * maxSide;
}
2. 正方形 动态规划

第 1 步:设计状态
dp[i][j] 表示以 matrix[i][j] 为右下角正方形的最大边长
第 2 步:状态转移方程
dp[i][j] = Min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]) + 1

当前点的左边,上边,左上角的三个点中选一个最小值,然后加 1

第 3 步:考虑初始化
第一行和第一列的 dp[i][j] = matrix[i][j] - ‘0’,也就意味着 dp[i][j] 要么是 0 要么是 1
第 4 步:考虑输出
第 5 步:考虑是否可以状态压缩
在这里插入图片描述
在这里插入图片描述
时间复杂度:O(N^2) 空间复杂度:O(N)

public int maximalSquare(char[][] matrix) {int rows = matrix.length;if (rows == 0) {return 0;}int cols = matrix[0].length;int[][] dp = new int[rows + 1][cols + 1];int maxSide = 0;for (int i = 1; i <= rows; i++) {for (int j = 1; j <= cols; j++) {//因为多申请了一行一列,所以这里下标要减 1if (matrix[i - 1][j - 1] == '0') {dp[i][j] = 0;} else {dp[i][j] = Math.min(dp[i - 1][j], Math.min(dp[i][j - 1], dp[i - 1][j - 1])) + 1;maxSide = Math.max(dp[i][j], maxSide);}}}return maxSide * maxSide;
}

【总结】

1.动态规划流程

第 1 步:设计状态
第 2 步:状态转移方程
第 3 步:考虑初始化
第 4 步:考虑输出
第 5 步:考虑是否可以状态压缩
- 二维数组 -> 一维数组

2. 行 row 列 col 注意边界!
  • 二维数组

int rows = matrix.length;
nt cols = matrix[0].length;

3. 暴力 ->优化

转载链接:https://leetcode-cn.com/problems/maximal-square/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by–46/
参考链接:https://leetcode-cn.com/problems/maximal-square/solution/li-jie-san-zhe-qu-zui-xiao-1-by-lzhlyle/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

次时代各制作插件使用方案以及技巧 包括UV 烘焙 减面等

次世代游戏的到来&#xff0c;使游戏行业向前迈进了一大步。次世代本来代表的是拥有更高cpu硬件设施的电视游戏&#xff0c;即戴着头盔能感到wii拳击的震动、拿着拳套能感应阴森恐怖的氛围。绝对让玩家融入气氛的Xbox360的《生化危机5》还带有场景破坏&#xff0c;能打下一片墙…

java学习(177):获取应用程序的路径

import javax.tools.Tool; import java.net.URLDecoder;//获取类路径 public final class test132 {public static String getClassPath(){String pathtest132.class.getClassLoader().getResource( "" ).getPath().toString();try {return URLDecoder.decode( path…

[Leedcode][JAVA][第69题][x的平方根][二分查找][数学]

【问题描述】 实现 int sqrt(int x) 函数。计算并返回 x 的平方根&#xff0c;其中 x 是非负整数。由于返回类型是整数&#xff0c;结果只保留整数的部分&#xff0c;小数部分将被舍去。输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数&#xff0c;小数部…

高可用的 MFS 文件分布式系统(Drdb+heartbeat+MFS )

理论拓扑 环境准备&#xff1a; N 台 Linux 测试服务器 操作系统版本 CentOS 6.5 32bit ***系统分区要求&#xff1a;需要为格式化的空分区*** IP 地址&#xff1a; mfsmaster&#xff1a;10.3.0.81 心跳 ip 192.168.1.11 mfsbackup&#xff1a;10.3.0.82 …

k-means 聚类过程演示

k-means是一种非监督 &#xff08;从下图 0 当中我们可以看到训练数据并没有标签标注类别&#xff09;的聚类算法&#xff1a; K-Means clustering intends to partition n objects into k clusters in which each object belongs to the cluster with the nearest mean. This …

html网页距离顶部50像素,HTML5 教程之CSS Padding(填充)

CSS Padding(填充)CSS Padding(填充)属性定义元素边框与元素内容之间的空间。Padding(填充)当元素的 Padding(填充)(内边距)被清除时&#xff0c;所"释放"的区域将会受到元素背景颜色的填充。单独使用填充属性可以改变上下左右的填充。缩写填充属性也可以使用&#x…

PHP在金山游戏运营中的应用

PHP在金山游戏官方网站中的应用&#xff1a; ①、PHP团队协作开发&#xff1b; ②、PHP系统架构应用。 PHP在金山游戏运营系统 Keyes 中的应用&#xff1a; ①、分层架构设计模型&#xff1b; ②、通用性API接口设计 PHP在金山游戏官方网站中的应用 PHP团队协作开发环境 PHP…

[Leedcode][JAVA][第236题][二叉树的公共祖先][后序遍历][BFS]

【问题描述】 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可…

html鼠标离开点击停留,Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)...

本文实例总结了Javascript DOM事件操作。分享给大家供大家参考&#xff0c;具体如下&#xff1a;使用JavaScript可以对HTML页面上的各种事件进行监听&#xff0c;如鼠标点击/释放&#xff0c;鼠标悬停/离开&#xff0c;等等。效果图&#xff1a;代码&#xff1a;/p>"ht…

天猫系统的流控降级

目录 1交易应用介绍 2系统挑战及应对 3优雅降级思路 4心得总结 交易应用介绍 购物袋 下单 确认订单 系统挑战及应对 挑战 • 高并发 • 低时延 • 容量有限 • 多外部系统协力&下单信息准确 目标 • 不挂掉 – 不因为容量原因导致网站瘫痪 – 自身的容量 – 后…

[剑指offer]面试题第[68-1]题[Leedcode][JAVA][第235题][二叉搜索树的最近公共祖先][递归][BFS]

【问题描述】[第235题][二叉搜索树的最近公共祖先][简单] 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖…

天猫服务系统的架构和经验

主要内容 业务介绍 分析设计过程 过程推演 事件/流程架构及使用场景讨论 基础组件介绍 改进点 业务介绍 业务介绍-业务关键点 产品定位 买家&#xff1a;提供标准的、优质的服务体验卖家&#xff1a;整合各环节资源&#xff0c;提供便捷的产品&#xff1b;提升服务质量、降低…

[Leedcode][JAVA][第50题][Pow(x, n)][快速幂][分治][转换类型]

【问题描述】[第50题][Pow(x, n)][中等] 实现 pow(x, n) &#xff0c;即计算 x 的 n 次幂函数。输入: 2.10000, 3 输出: 9.26100 示例 3:输入: 2.00000, -2 输出: 0.25000 解释: 2-2 1/22 1/4 0.25【解答思路】 1.快速幂 时间复杂度&#xff1a;O(logN) 空间复杂度&#x…

淘宝网商品管理?技术 ?

目录 技术挑战 商品管理 系统的演化过程 技术细节 展望 技术挑战淘宝商品管理 十亿级商品数百万级用户数每天处理TB级数据数据沉淀成本控制业务多变上千条业务规则 发展过程淘宝商品管理 第一阶段&#xff1a;基于搜索 基于搜索的商品管理 〙实现 存储用户设置的规则&…

考计算机网络证书转深户,惊?这个证书能帮你直接入深户,还没有学历要求? 你还在等什么...

原标题&#xff1a;惊&#xff1f;这个证书能帮你直接入深户&#xff0c;还没有学历要求&#xff1f; 你还在等什么只要持有中级职称&#xff0c;40周岁以内申请入户时&#xff0c;有连续半年以上社保&#xff0c;就可以直接入户了&#xff0c;没有学历的要求&#xff01;而之前…

[Leedcode][JAVA][第155题][最小栈][基本类型包装类]

【问题描述】 【解答思路】 1. 两个栈实现 1.1、辅助栈和数据栈同步 特点&#xff1a;编码简单&#xff0c;不用考虑一些边界情况&#xff0c;就有一点不好&#xff1a;辅助栈可能会存一些“不必要”的元素。 1.2、辅助栈和数据栈不同步 特点&#xff1a;由“辅助栈和数据…

淘宝主站Cgroup资源控制

目录 项目背景&#xff1a;主站的现状 选型的过程 Cgroup/LinuxContainer介绍 定制和开发 存在的问题和对策 项目背景 主站&#xff1a; 跑在xen虚拟机上的Java应用 处理业务逻辑&#xff0c;本地无重要存储&#xff0c;无状态。 一台物理机部署3台虚拟机 双路Xeon&#…

[Leedcode][JAVA][第102题][二叉树的层序遍历][递归][迭代][BFS]

【问题描述】[第102题][二叉树的层序遍历][中等] 给你一个二叉树&#xff0c;请你返回其按 层序遍历 得到的节点值。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。示例&#xff1a; 二叉树&#xff1a;[3,9,20,null,null,15,7],3/ \9 20/ \15 7 返…

java学习(178):终篇?静态代理?动态代理?

总体设计 包com.xzit.aop DynlnvokeProducerProxy 包com.xzit.db db 包com.xzit.entity ClientDepartmentEmployeeGoodsProducer 包com.xzit.interfaces DepartmentDaoImpEmployeeDaoImpIGoodsIObject 包com.xzit.proxy TeatDynProxyTestStaticProxy 咱直接上代码&#xff0c;…