当前位置: 首页 > news >正文

有个网站301什么群晖wordpress如何连接mysql

有个网站301什么,群晖wordpress如何连接mysql,超频三网站谁家做的,力杨网站建设Problem: 1504. 统计全 1 子矩形 文章目录整体思路完整代码时空复杂度时间复杂度:O(m * n)空间复杂度:O(n)整体思路 这段代码的目的是计算一个二维01矩阵 mat 中,所有仅由 1 组成的子矩阵的总数量。 该算法采用了一种非常巧妙的 降维打击 策…

Problem: 1504. 统计全 1 子矩形

文章目录

  • 整体思路
  • 完整代码
  • 时空复杂度
    • 时间复杂度:O(m² * n)
    • 空间复杂度:O(n)

整体思路

这段代码的目的是计算一个二维01矩阵 mat 中,所有仅由 1 组成的子矩阵的总数量。

该算法采用了一种非常巧妙的 降维打击 策略,也称为 “固定边界法”。它通过枚举所有可能的子矩阵的 上下边界,将一个二维的矩阵计数问题,转化为多个一维的数组计数问题。

  1. 核心思想:固定上下边界,转化为一维问题

    • 算法通过两层外层循环,topbottom,来固定所有可能的水平“切片”(即子矩阵的上下边界)。
    • 对于每一个固定的 topbottom,问题就变成了:在这个由 top 行和 bottom 行界定的、高度为 h = bottom - top + 1 的子矩阵中,有多少个全为 1 的矩形?
    • 为了解决这个子问题,算法进一步将这个切片“压扁”成一个一维数组。
  2. “压扁”操作与一维数组的含义

    • 对于每个固定的 [top, bottom] 切片,算法会动态构建一个一维数组 a
    • a[i] 的含义是:在第 i 列,从 top 行到 bottom 行,有多少个 1。
    • 代码通过 a[i] += mat[bottom][i] 巧妙地实现了这个累加。当 bottom 指针下移时,a 数组会不断更新,反映新切片中每一列的 1 的数量。
    • 如果 a[i] 的值恰好等于当前切片的高度 h,这就意味着在第 i 列,从 topbottom 的所有元素都是 1。我们可以将这样的列视为一个“有效列”。
  3. 解决一维问题:统计连续“有效列”构成的子数组

    • 当我们将二维切片转化为一个由“有效列”(值为 h)和“无效列”(值不为 h)组成的一维序列后,原问题就变成了:在这个一维序列中,统计所有由“有效列”组成的连续子数组的数量。
    • 这与 zeroFilledSubarray 问题(统计全0子数组)的逻辑是完全一样的。
    • 代码使用 last 变量来记录上一个“无效列”的索引。
    • 当遇到一个“有效列” i 时,i - last 的值就等于当前连续“有效列”块的长度,这也恰好是以当前第 i 列为结束列的所有新的全 1 矩形的数量。将这个值累加到 ans 中。

总结流程:枚举所有 top -> 枚举所有 bottom -> 形成一个水平切片 -> 将切片问题转化为一维的“有效列”问题 -> 在一维上统计连续子数组数量 -> 累加到总结果。

完整代码

class Solution {/*** 计算一个二维01矩阵中,所有元素都为 1 的子矩阵的总数量。* @param mat 一个由 0 和 1 组成的二维整数数组* @return 全为 1 的子矩阵的总数*/public int numSubmat(int[][] mat) {int m = mat.length;int n = mat[0].length;int ans = 0;// 外层循环:固定子矩阵的上边界 topfor (int top = 0; top < m; top++) {// a: 一维数组,用于“压扁”二维子矩阵。// a[i] 将存储在当前 [top, bottom] 切片中,第 i 列的 1 的总数。int[] a = new int[n];// 中层循环:固定子矩阵的下边界 bottom,从 top 开始向下扩展for (int bottom = top; bottom < m; bottom++) {// last: 记录上一个“无效列”的索引。初始化为-1。int last = -1;// h: 当前 [top, bottom] 切片的高度。int h = bottom - top + 1;// 内层循环:遍历当前切片的每一列for (int i = 0; i < n; i++) {// 更新列的和:将 bottom 行的新元素加入a[i] += mat[bottom][i];// 判断当前列是否为“有效列”// 如果 a[i] 不等于切片高度 h,说明该列在 [top, bottom] 之间存在 0if (a[i] != h) {// 这是一个无效列,更新 last 的位置last = i;} else {// 这是一个有效列。// i - last 的值等于当前连续有效列的长度。// 这个长度也等于以当前第 i 列为结束列的、新的全1矩形的数量。ans += i - last;}}}}return ans;}
}

时空复杂度

时间复杂度:O(m² * n)

  1. 外层循环 (top):执行 m 次。
  2. 中层循环 (bottom):对于每个 topbottomtop 运行到 m-1。总的迭代次数是 m + (m-1) + ... + 1,这是一个 O(m²) 的级别的操作。
  3. 内层循环 (i):对于每一对 (top, bottom)i 循环执行 n 次。

综合分析
算法的总操作次数大致是 (m * m / 2) * n。因此,其时间复杂度为 O(m² * n)

空间复杂度:O(n)

  1. 主要存储开销:算法在 top 循环的每次迭代中,都会创建一个名为 a 的整型数组。
  2. 空间大小:数组 a 的长度是 n,即矩阵的列数。这个数组在下一次 top 循环开始时会被重新创建,所以空间不会累积。
  3. 其他变量m, n, ans, top, bottom, last, h, i 等都只占用常数级别的空间。

综合分析
算法在任何时刻所需的额外辅助空间主要由数组 a 决定。因此,其空间复杂度为 O(n)

参考灵神

http://www.dtcms.com/a/514111.html

相关文章:

  • 做文献ppt模板下载网站有哪些深圳宝安建设工程交易中心
  • 如何进行网站宣传推广杭州网站制作模板
  • 注册网站需要多少钱wordpress极简
  • 网站搭建运营学习网站模板下载
  • 网站设置不可粘贴做网站公司哪家
  • 怎么制作网站模版谷歌应用商店
  • 古交网站建设鹤壁网站建设费用
  • .net做网站后台杭州知名设计公司排名
  • 恩做网站动态页面好python编程网页版
  • 建设网站公司有哪些阿坝网站设计
  • 网站网络投票建设模板dedecms 迁移 wordpress
  • 四川网站建设培训学校上海网站开发技术最好公司
  • 深圳网站设计排名营销推广文案
  • 网站代码素材网站开发所需的技术
  • 房产网站运营方案个人可以做招聘网站吗
  • 中文字体怎么设计网站包装设计公司哪家好
  • 网站制作书生电商平台介绍
  • 国外做的好的网站wordpress发送邮件出现502
  • 昆明优秀网站青岛博海建设集团有限公司网站
  • 代做网站排名wps免费模板网站
  • 怎样做网站分流赚钱怎么建设自己的卡盟网站
  • 中国空间站拒绝10国名单小程序代理加盟有哪些大品牿
  • 上海建设银行网站上班时间表洛阳网站建设建站系统
  • 网站开发帐务处理网站标题是什么
  • 绵阳个人网站建设做网站属于什么备案
  • 传世网站建设一家公司为什么要建官方网站
  • 网站联系方式设置要求thinkphp做的教育网站
  • 企业为什么要年检seo流量查询
  • 网站关键词优化有用吗网站做软件有哪些内容
  • 这是我自己做的网站珠海网站建设小小网络