算法每日一练 (23)

ops/2025/4/2 3:51:52/

💢欢迎来到张翊尘的技术站
💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥

文章目录

  • 算法每日一练 (23)
    • 最大正方形
      • 题目描述
      • 解题思路
      • 解题代码
        • `c/c++`
        • `golang`
        • `lua`

官方站点: 力扣 Leetcode

算法每日一练 (23)

最大正方形

题目地址:最大正方形

题目描述

在一个由 '0''1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。

示例 1:

在这里插入图片描述

输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:4

示例 2:

在这里插入图片描述

输入:matrix = [["0","1"],["1","0"]]
输出:1

示例 3:

输入:matrix = [["0"]]
输出:0

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 300
  • matrix[i][j]'0''1'

解题思路

  • 首先创建辅助变量:mnmaxValdp

    • mn 分别表示矩阵的行数和列数。
    • maxVal 用于记录矩阵中最大的正方形边长,初始值为 0。
    • dp 用于记录当前行的正方形边长。
  • 紧接着,遍历矩阵的第一行,更新 maxValdp[i] 的值。这是因为第一行中的每个 '1' 都可以构成一个边长为 1 的正方形。

  • 从第二行开始,遍历矩阵的每个位置 (i, j),对于每一行的每个元素:

    • 如果是第一列(j == 0),直接将当前元素的值赋给 dp[j] 即可。
    • 否则,根据动态规划的逻辑更新 dp[j]
      • 如果当前元素是 '0',则 dp[j]0,因为无法形成正方形。
      • 如果当前元素是 '1',则 dp[j] 的值为:当前元素的上方(up)、左方(left)和左上方(lup)三个值的最小值加 1。这是因为正方形的形成需要依赖于其上方、左方和左上方的正方形边长。
  • 更新 maxVal 为当前列的最大值。

  • 最终返回 maxVal 的平方,即是满足题意的返回值。

解题代码

c/c++
#include <vector>class Solution
{
public:int maximalSquare(std::vector<std::vector<char>> &matrix){int m = matrix.size();int n = matrix[0].size();int maxVal = 0;std::vector<int> dp(n, 0);for (int i = 0; i < n; i++){dp[i] = matrix[0][i] - '0';maxVal = std::max(maxVal, dp[i]);}for (int i = 1; i < m; i++){int prev = dp[0];for (int j = 0; j < n; j++){int cur = matrix[i][j] - '0';if (j == 0)dp[j] = cur;else{int t = dp[j];if (matrix[i][j] == '0')dp[j] = 0;else{int up = t;int left = dp[j - 1];int lup = prev;dp[j] = std::min(std::min(up, left), lup) + 1;}prev = t;}maxVal = std::max(maxVal, dp[j]);}}return maxVal * maxVal;}
};
golang
func maximalSquare(matrix [][]byte) int {m := len(matrix)n := len(matrix[0])maxVal := 0dp := make([]int, n)for i := 0; i < n; i++ {dp[i] = int(matrix[0][i] - '0')maxVal = max(maxVal, dp[i])}for i := 1; i < m; i++ {prev := dp[0]for j := 0; j < n; j++ {cur := int(matrix[i][j] - '0')if j == 0 {dp[j] = cur} else {t := dp[j]if matrix[i][j] == '0' {dp[j] = 0} else {up, left, lup := t, dp[j-1], prevdp[j] = min(up, left, lup) + 1}prev = t}maxVal = max(maxVal, dp[j])}}return maxVal * maxVal
}
lua
local function maximalSquare(matrix)local m, n = #matrix, #matrix[1]local maxVal = 0local dp = {}for i = 1, n dodp[i] = matrix[1][i] - '0'maxVal = math.max(maxVal, dp[i])endfor i = 2, m dolocal prev = dp[1]for j = 1, n dolocal cur = matrix[i][j] - '0'if j == 1 thendp[j] = curelselocal t = dp[j]if matrix[i][j] == '0' thendp[j] = 0elselocal up, left, lup = t, dp[j - 1], prevdp[j] = math.min(up, left, lup) + 1endprev = tendmaxVal = math.max(maxVal, dp[j])endendreturn maxVal * maxVal
end

🌺🌺🌺撒花!

如果本文对你有帮助,就点关注或者留个👍
如果您有任何技术问题或者需要更多其他的内容,请随时向我提问。

在这里插入图片描述


http://www.ppmy.cn/ops/171253.html

相关文章

1.1 计算机网络的概念

首先来看什么是计算机网络&#xff0c;关于计算机网络的定义并没有一个统一的标准&#xff0c;不同的教材有 不同的说法&#xff08;这是王道书对于计算机网络的定义&#xff09;&#xff0c;我们可以结合自己的生活经验去体会这个 定义。 可以用不同类型的设备去连接计算机网络…

《符号之纱与血肉之躯:具身智能范式的哲学重构与AI发展新图景》

引言 人工智能的发展正引发对人类智能本质的新一轮反思。当前的大型语言模型等“离身智能”&#xff08;disembodied intelligence&#xff09;能够“读万卷书”式地学习海量数据&#xff0c;却缺乏“行万里路”般的亲身体验。这种基于纯符号和统计的智能是否真正理解人类世界…

C++初阶知识复习 (31~45)

C 初阶总复习 &#xff08;31~45&#xff09; 目的31. 2037. C中函数模板和类模板的区别32. 2039. C中strcpy和memcpy的区别33. 2041. 堆内存和栈内存的区别34. 2042. 栈溢出是什么&#xff1f;35. 2043.回调函数36. 2044. C中为什么使用nullptr而不使用null37. 2045. 什么是大…

USB详解

应用范围 USB 拓扑结构 USB 逻辑部分 USB供电方式 USB 配置描述符 USB 挂起模式 USB总线信号 USB 设备的插入检测和速度检测 连接和断开连接 数据编解码和位填充 USB传输 Packet 的组成 Packet 的内容 Pack内容之PID域 Pack内容之地址域 Pack内容之帧号域 Packet 内容之数据域 …

微信小程序:数据拼接方法

1. 使用 concat() 方法拼接数组 // 在原有数组基础上拼接新数组 Page({data: {originalArray: [1, 2, 3]},appendData() {const newData [4, 5, 6];const combinedArray this.data.originalArray.concat(newData);this.setData({originalArray: combinedArray});} }) 2. 使…

详解数据结构之树、二叉树、二叉搜索树详解 C++实现

树 树是n &#xff08; n>0 &#xff09;个结点的有限集。n0时称为空树。在任意一棵非空树中&#xff1a; 有且仅有一个特定的称为根&#xff08;Root&#xff09;的结点&#xff1b;当n>1时&#xff0c;其余结点可分为m &#xff08;m>0&#xff09;个互不相交的有…

Django之旅:第六节--mysql数据库操作增删改查(二)

前提条件(models.py已经设置好&#xff09;&#xff1a; from django.db import mmodelsclass UserInfo(models.Model):namemodels.CharFIeld(max_length32)passwordmodels.CharFIeld(max_length64)#agemodels.IntegerFIeld()操作数据语法&#xff08;在views.py文件&#xff0…

鸿蒙生态圈暗战:数字孪生三强争霸谁将主宰消费电子未来?

IDC数据显示&#xff0c;2025年Q1华为以38.7%份额领跑中国折叠屏市场&#xff0c;Pura X首月销量突破120万台。这款搭载HarmonyOS 5的旗舰&#xff0c;通过灵犀通信技术实现5G A网络下载速率提升30%&#xff0c;并在离线环境下完成厘米级导航。其爆款逻辑背后&#xff0c;是鸿蒙…