leetcode 统计全为1的正方形子矩阵、最大正方形

news/2024/9/22 17:19:18/

给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数。

示例 1:

输入:matrix =
[
  [0,1,1,1],
  [1,1,1,1],
  [0,1,1,1]
]
输出:15
解释: 
边长为 1 的正方形有 10 个。
边长为 2 的正方形有 4 个。
边长为 3 的正方形有 1 个。
正方形的总数 = 10 + 4 + 1 = 15.
示例 2:

输入:matrix = 
[
  [1,0,1],
  [1,1,0],
  [1,1,0]
]
输出:7
解释:
边长为 1 的正方形有 6 个。 
边长为 2 的正方形有 1 个。
正方形的总数 = 6 + 1 = 7.

提示:

1 <= arr.length <= 300
1 <= arr[0].length <= 300
0 <= arr[i][j] <= 1

本题的巧妙之处不止在于动态规划的思想找出了满足条件的正方形,其中ans在求dp数组的过程中便求了出来,值得回味。

class Solution {
public:int countSquares(vector<vector<int>>& matrix) {int m=matrix.size();int n=matrix[0].size();vector<vector<int> > dp(m,vector<int>(n));int ans=0;for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(i==0||j==0)dp[i][j]=matrix[i][j];else if(matrix[i][j]==0)dp[i][j]=0;elsedp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;ans+=dp[i][j];}}return ans;}
};

在一个由 '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'

class Solution {
public:int maximalSquare(vector<vector<char>>& matrix) {int m=matrix.size();int n=matrix[0].size();if(m==0||n==0)return 0;int maxn=0xc0c0c0c0;vector<vector<int> > dp(m,vector<int>(n));for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(i==0||j==0)dp[i][j]=matrix[i][j]-'0';else if(matrix[i][j]=='0')dp[i][j]=0;elsedp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;maxn=max(maxn,dp[i][j]);}}return maxn*maxn;}
};


http://www.ppmy.cn/news/347859.html

相关文章

【数据结构】八大排序算法

目录 一、直接插入排序 二、希尔排序 三、选择排序 四、堆排序 五、冒泡排序 六、快速排序 1、递归版本 1.1 hoare 法 1.2 挖坑法 1.3 前后指针法 2、非递归版本 3、快速排序的优化 3.1 三数取中 3.2 小区间优化 七、归并排序 1、递归版本 2、非递归版本 八、计数排序 …

HTML5 语义元素(一)页面结构

本篇主要介绍HTML5增加的语义元素中关于页面结构方面的&#xff0c;包含&#xff1a; <article>、<aside>、<figure>、<figcaption>、<footer>、<header>、<main>、<nav>、<section>等元素。 目录 1. 语义元素介绍 1.…

助力金融业数字化转型,原点安全将出席“2023 中国金融业数字化转型发展大会”

6月7日-9日&#xff0c;由中国金融电子化集团有限公司、南京市建邺区人民政府、中国人民银行南京分行主办的“2023 中国金融业数字化转型发展大会暨第十三届中国城市商业银行信息化发展创新座谈会”将在南京举行。中国人民银行领导、南京市政府领导、全国城市商业银行主管科技行…

联想E430c:To interrupt normal starup,press enter问题解决方法

上次写的博客因为自己没有解决问题&#xff0c;所以笔者拿去把电脑重新装系统了&#xff0c;笨死了。 今天笔者再次试验&#xff0c;终于找到了解决方法。有需要的拿去用&#xff0c;不谢~~~ **出现的问题界面是下面的这个界面&#xff1a;**解决方法&#xff1a;&#xff08;…

thinkpad e430c系列无线网卡经常掉线解决办法

在京东上买了个thinkpad e430c 33651j8&#xff0c;但是买回来后装上x64的win7后无线经常掉线。后来百度了下&#xff0c;发现该系列无线网卡都有这种问题。这个属于硬件缺陷&#xff0c;不是改什么电源设置和系统设置就可以解决的&#xff0c;最后是在淘宝上买了个英特尔迅驰无…

Thinkpad E430C关闭触摸板(Ubuntu)

请打开终端 ctrl alt t 输入 xinput output: ⎡ Virtual core pointer id2 [master pointer (3)]⎜ ↳ Virtual core XTEST pointer id4 [slave pointer (2)]⎜ ↳ ThinkPad USB Travel Mouse id10 [s…

Linux Kernel:thread_info与进程调度

环境: Kernel Version:Linux-5.10 ARCH:ARM64 在内核中task_struct用来描述进程的通用数据,而针对不同架构的数据则存储在thread_info中。Linux4.4之前thread_info独立于task_struct,并且可以通过其成员*task查找到task_struct,之后则根据宏CONFIG_THREAD_INFO_IN_TASK,…

ThinkPad E430C从待机状态恢复后,无线网络就不可用了

神奇的问题&#xff0c;ThinkPad E430C从待机状态恢复后&#xff0c;无线网络就不可用了。 Windows7系统&#xff0c;按FnF8或F7可以调节屏幕亮度&#xff0c;但是F9Fn也没反应。 把驱动卸载了重新安装了也不管用&#xff0c;Windows诊断提示无线功能已关闭。 实在没办法&am…