动态规划解最大正方形面积(多解)
📅 2026/7/7 19:24:29
👁️ 次浏览
LeetCode221在一个由0和1组成的二维矩阵内找到只包含1的最大正方形并返回其面积。示例输入matrix [[1,0,1,0,0],[1,0,1,1,1],[1,1,1,1,1],[1,0,0,1,0]]输出4Python解法1.暴力法class Solution: def maximalSquare(self, matrix: List[List[str]]) - int: if not matrix or not matrix[0]: return 0 m len(matrix) n len(matrix[0]) max_side 0 for i in range(m): for j in range(n): if matrix[i][j] 1: count_side 1 # 能拓展的最大边界 while i count_side m and j count_side n: flag True # 检查新增的一行右侧列 for k in range(i, i count_side 1): if matrix[k][j count_side] 0: flag False break if not flag: break # 检查新增的一列底行 for k in range(j, j count_side 1): if matrix[i count_side][k] 0: flag False break if flag: count_side 1 else: break max_side max(max_side, count_side) return max_side * max_side遍历矩阵中的每个元素遇到 1则将该元素作为正方形的左上角确定正方形的左上角后根据左上角所在的行和列计算可能的最大正方形的边长在该边长范围内寻找只包含 1 的最大正方形每次在下方新增一行以及在右方新增一列判断新增的行和列是否满足所有元素都是 1。2.动态规划class Solution: def maximalSquare(self, matrix: List[List[str]]) - int: if not matrix or not matrix[0]: return 0 m len(matrix) n len(matrix[0]) max_side 0 #创建二维表 dp [[0] * n for _ in range(m)] for i in range(m): for j in range(n): if matrix[i][j] 1: if i 0 and j 0: dp[i][j] 1 else: #dp[i][j]代表以坐标点(i,j) 为右下角的最大正方形 dp[i][j] min(dp[i - 1][j], dp[i - 1][j - 1], dp[i][j - 1]) 1 max_side max(max_side, dp[i][j]) return max_side * max_side一、整体思路题目目标是找出矩阵中全部由 1 构成的正方形返回正方形面积。动态规划核心思路是定义一个 dp 二维数组数组每个位置的值代表以当前坐标格子作为正方形右下角时能形成的最大正方形边长遍历整个矩阵不断更新最长边长最后边长平方就是最大面积。二、前置边界判断首先处理空矩阵特殊情况如果矩阵本身为空或者矩阵存在但第一行没有元素说明不存在任何正方形直接返回 0。三、变量与 dp 数组定义m 代表矩阵总行数n 代表矩阵总列数max_side 用来记录遍历过程中出现过的最大正方形边长初始值设为 0。 dp 数组和原矩阵行列大小完全一致所有元素初始化为 0dp [i][j] 的含义以原矩阵第 i 行第 j 列格子为右下角仅由 1 组成的正方形的最大边长。四、双层循环遍历矩阵逐行逐列扫描矩阵每一个格子分两种情况处理格子内容为 0 和 1 的场景。如果当前格子内容是字符 0当前位置无法作为有效正方形右下角对应 dp 数组该位置保持初始 0不参与边长更新。如果当前格子内容是字符 1再细分边界行 / 列与中间区域Java解法动态规划class Solution { public int maximalSquare(char[][] matrix) { if(matrix null || matrix[0] null){ return 0; } int m matrix.length; int n matrix[0].length; int max_side 0; int[][] dp new int[m][n]; for(int i 0; i m; i){ for(int j 0; j n; j){ if(matrix[i][j] 1){ if(i 0 || j 0){ dp[i][j] 1; }else{ dp[i][j] Math.min(Math.min(dp[i-1][j], dp[i][j-1]), dp[i-1][j-1]) 1; } max_side Math.max(max_side, dp[i][j]); } } } return max_side * max_side; } }注意Java比较不能直接三个比较C解法动态规划class Solution { public: int maximalSquare(vectorvectorchar matrix) { if (matrix.empty() || matrix[0].empty()) return 0; int m matrix.size(); int n matrix[0].size(); int maxSide 0; vectorvectorint dp(m, vectorint(n, 0)); for (int i 0; i m; i) { for (int j 0; j n; j) { if (matrix[i][j] 1) { if (i 0 || j 0) { dp[i][j] 1; } else { dp[i][j] min({dp[i-1][j], dp[i][j-1], dp[i-1][j-1]}) 1; } maxSide max(maxSide, dp[i][j]); } } } return maxSide * maxSide; } };
BiSheng JDK 11开发者指南:500华为产品验证的最佳实践 【免费下载链接】bishengjdk-11 BiSheng JDK 11 is a high-performance, production-ready distribution of OpenJDK 11. 项目地址: https://gitcode.com/openeuler/bishengjdk-11
前往项目官网免费下载…
📅 2026/7/7 19:24:29
随着电子产品迅速地迭代更新, 废弃电路板已然是的重要源头。这一进程不仅是环保责任的一种展现, 更是资源循环利用的关键之处。高效地分离贵重金属是当中的核心技术难题, 直接关联着回收的经济价值以及环境效益。针对日益增加的电子垃圾总量这种情况, 构建规范的回收体系显得特…
📅 2026/7/7 19:24:29
kucg性能优化技巧:提升通信效率的7个方法 【免费下载链接】kucg ucg is a subobject of openmpi and provides a extensible communication framework. 项目地址: https://gitcode.com/openeuler/kucg
前往项目官网免费下载:https://ar.openeuler…
📅 2026/7/7 19:22:29
1. 项目概述:为嵌入式系统添加互动声音的硬件方案在智能硬件和物联网设备开发中,声音反馈是最直接的人机交互方式之一。STM32L433RC作为STMicroelectronics推出的超低功耗ARM Cortex-M4微控制器,搭配CMT-8540S-SMT贴片蜂鸣器,可以…
📅 2026/7/7 20:18:46
1. 项目概述:从“识别”到“破解”的思维跃迁在自动化测试、数据采集乃至一些合规的业务流程中,验证码始终是横亘在程序与目标服务之间的一道坎。极验验证码,以其动态交互、行为验证和强大的后台风控逻辑,成为了业内公认的“硬骨头…
📅 2026/7/7 20:18:46
2026年山东宠物食品代工/猫条生产/湿粮餐盒/全价宠物饲料/宠物零食工厂公司优选指南 临沂五大品质工厂公司参考 本文旨在梳理2026年山东宠物食品市场的主流品质工厂与公司,分析行业发展动态与竞争特色。宠物食品作为宠物消费的核心品类,其品质直接关联宠…
📅 2026/7/7 20:18:46
1. 项目概述:从真实案例看路径遍历漏洞的实战威胁 路径遍历漏洞,一个听起来有点技术范儿的名字,在安全圈里我们更习惯叫它“目录穿越”或者“任意文件读取”。别被名字唬住,它的原理其实很简单:攻击者通过构造特殊的输…
📅 2026/7/7 20:18:46
本文还有配套的精品资源,点击获取
简介:一套可直接部署运行的高校课堂考勤管理Java Web系统,基于SpringSpringMVCMyBatis(SSM)框架开发,后端使用JDK1.8,适配Tomcat7及以上版本,数…
📅 2026/7/7 20:18:46
1. 项目背景与硬件选型解析在物联网和嵌入式设备快速发展的今天,高效可靠的通知系统成为各类设备的标配功能。传统蜂鸣器方案存在音量小、功耗高、音质差等问题,而基于STM32F446RE微控制器和PAM8904压电发声器驱动器的组合,为这些问题提供了专…
📅 2026/7/7 20:16:46
CentOS SSH连接故障排查:从基础检查到深度修复的完整指南引言当你尝试通过Xshell或其他SSH客户端连接CentOS服务器时,突然遭遇"Connection refused"或"Connection timed out"的错误提示,这种经历对任何运维人员或开发者来…
📅 2026/7/7 0:00:45
B站评论删除API逆向工程实战:关键参数解析与自动化操作指南1. 理解B站评论删除机制的核心逻辑在视频平台内容管理中,评论删除功能涉及复杂的权限验证和数据交互流程。B站的评论删除API采用了一套基于Web安全标准的防护机制,主要依赖三个关键参…
📅 2026/7/7 0:00:45
1. 项目概述:为什么Java安全是红蓝对抗的焦点在当前的网络安全攻防演练,也就是我们常说的红蓝对抗中,Java应用一直是双方交锋的核心战场。这不仅仅是因为Java在企业级应用、金融系统和大型互联网后台中无处不在,更因为其技术栈的复…
📅 2026/7/7 0:00:45
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/7 12:08:23
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/7 9:08:28
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/7 6:33:36
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/7 9:08:31
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/7 9:08:30
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/7 4:32:18