题目描述:

自己的提交:

  1. class Solution:
  2. def countSquares(self, matrix: List[List[int]]) -> int:
  3. if not matrix:
  4. return 0
  5. m,n = len(matrix),len(matrix[0])
  6. dp = [0] + [0] * m * n
  7. for i in range(m):
  8. for j in range(n):
  9. dp[i*n+j+1] = dp[i*n+j]
  10. layer = min(i,j)
  11. for l in range(layer+1):
  12. flag = True
  13. for i_ in range(i-l,i+1):
  14. if matrix[i_][j-l] == 0:
  15. flag = False
  16. for j_ in range(j-l,j+1):
  17. if matrix[i-l][j_] == 0:
  18. flag = False
  19. if flag == False:
  20. break
  21. dp[i*n+j+1] += 1
  22. return dp[-1]

优化: O(N^2)

  1. class Solution:
  2. def countSquares(self, matrix: List[List[int]]) -> int:
  3. n = len(matrix)
  4. m = len(matrix[0])
  5. dp = [[0] * m for _ in range(0, n)]
  6. ret = 0
  7. for i in range(0, n):
  8. for j in range(0, m):
  9. if matrix[i][j] == 0:
  10. continue
  11. dp[i][j] = 1
  12. if i == 0 or j == 0:
  13. ret += dp[i][j]
  14. continue
  15. sub = min(dp[i - 1][j], dp[i][j - 1])
  16. if sub != 0:
  17. if matrix[i - sub][j - sub] == 1:
  18. dp[i][j] = sub + 1
  19. else:
  20. dp[i][j] = sub
  21. ret += dp[i][j]
  22. return ret

再优化:

  1. class Solution(object):
  2. def countSquares(self, A):
  3. R, C = len(A), len(A[0])
  4.  
  5. dp = [[0] * (C+1) for _ in range(R+1)]
  6. ans = 0
  7. # largest square ending here
  8. for r, row in enumerate(A):
  9. for c, val in enumerate(row):
  10. if val:
  11. dp[r+1][c+1] = min(dp[r][c], dp[r][c+1], dp[r+1][c]) + 1
  12. ans += dp[r+1][c+1]
  13. return ans

leetcode-165周赛-1277-统计全为1的正方形子矩阵的更多相关文章

  1. PHP算法之统计全为 1 的正方形子矩阵

    在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0 输出: 4 来源:力扣( ...

  2. 51nod 1158 全是1的最大子矩阵

    题目链接:51nod 1158 全是1的最大子矩阵 题目分类是单调栈,我这里直接用与解最大子矩阵类似的办法水过了... #include<cstdio> #include<cstri ...

  3. 51nod1158 全是1的最大子矩阵

    跟最大子矩阵差不多O(n3)扫一下.有更优写法?挖坑! #include<cstdio> #include<cstring> #include<cctype> #i ...

  4. 51Nod 1158 全是1的最大子矩阵 —— 预处理 + 暴力枚举 or 单调栈

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1158 1158 全是1的最大子矩阵  基准时间限制:1 秒 空 ...

  5. [LeetCode] Count Binary Substrings 统计二进制子字符串

    Give a string s, count the number of non-empty (contiguous) substrings that have the same number of ...

  6. [leetcode] 204. Count Primes 统计小于非负整数n的素数的个数

    题目大意 https://leetcode.com/problems/count-primes/description/ 204. Count Primes Count the number of p ...

  7. leetcode 165

    才一周没刷leetcode,手就生了,这个题目不难,但是完全AC还是挺费劲的. 题目描述: Compare two version numbers version1 and version2.If v ...

  8. mysql优化器在统计全表扫描的代价时的方法

    innodb 的聚集索引 的叶子结点 存放的 是 索引值以及数据页的偏移量 那么在计算全表扫描的代价是怎么计算的呢? 我们知道代价 为 cpu代价+io代价 cpu代价 就是 每5条记录比对 计算一个 ...

  9. [LeetCode] 165. Compare Version Numbers 比较版本数

    Compare two version numbers version1 and version1.If version1 > version2 return 1, if version1 &l ...

随机推荐

  1. java编程实战

    线程池为什么要有它: 线程创建要开辟虚拟机栈,释放线程要垃圾回收的. server端要并发访问数据库的. 服务器启动有线程池放着. ----- 线程池的概念: 1.任务队列 2.拒绝策略(抛出异常,直 ...

  2. vue.js 导出JSON

    cnpm install file-saver --save <template> <div class="hello"> <button @clic ...

  3. BLUEHOST香港主机FTP连接不上解决办法

    昨天购买了BLUEHOST的香港主机后,以为一切顺风顺水,结果FTP却连接不上,用了多种FTP工具都不行,​​​按官方博客要求开启了TSL仍然不行​.​经过一晚上的测试后终于成功,现分享出来. 方法一 ...

  4. sql语句中取整数和小数部分

    sql 取整数去小数点 ,) ' Sql截取浮点小数位数,不四舍五入 ,) 结果:551.24 ,) 结果:551.23 第一个2表示截取2位 第二个0,1分别表示0是四舍五入,0以外是截取 如何分别 ...

  5. php explode()函数 语法

    php explode()函数 语法 作用:把字符串打散为数组 语法:explode(separator,string,limit)大理石机械构件 参数: 参数 描述 separator 必需.规定在 ...

  6. JS中数据结构之散列表

    散列是一种常用的数据存储技术,散列后的数据可以快速地插入或取用.散列使用的数据 结构叫做散列表.在散列表上插入.删除和取用数据都非常快. 下面的散列表是基于数组进行设计的,数组的长度是预先设定的,如有 ...

  7. Android中实现Activity的启动拦截之----实现360卫士的安装应用界面

    第一.摘要 今天不是周末,但是我已经放假了,所以就开始我们的技术探索之旅,今天我们来讲一下Android中最期待的技术,就是拦截Activity的启动,其实我在去年的时候,就像实现这个技术了,但是因为 ...

  8. Asp.Net页面间传值常见的几种方法

    一.QueryString QueryString是一种非常简单的传值方式,他是将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于传递 ...

  9. flutter页面布局二

    Stack 在flutter中,Stack表示堆的意思,可以用来实现页面的定位布局. Stack组件接收两个可选参数: alignment:配置所有子元素的显示位置 children:子组件    在 ...

  10. bugku | sql注入2

    http://123.206.87.240:8007/web2/ 全都tm过滤了绝望吗? 提示 !,!=,=,+,-,^,% uname=admin&passwd=1' and '1 : 一个 ...