博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Maximal Square
阅读量:6072 次
发布时间:2019-06-20

本文共 2200 字,大约阅读时间需要 7 分钟。

Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area.

For example, given the following matrix:

1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0

Return 4.

枚举就OK了,时间复杂度为O(n^3),276ms AC。

1 class Solution { 2 public: 3     int getArea(vector
&array, int k) { 4 if (array.size() < k) return 0; 5 int cnt = 0; 6 for (int i = 0; i < array.size(); ++i) { 7 if (array[i] != k) cnt = 0; 8 else ++cnt; 9 if (cnt == k) return k * k;10 }11 return 0;12 }13 int maximalSquare(vector
>& matrix) {14 vector
array;15 int res = 0;16 for (int i = 0; i < matrix.size(); ++i) {17 array.assign(matrix[0].size(), 0);18 for (int j = i; j < matrix.size(); ++j) {19 for (int k = 0; k < matrix[0].size(); ++k) if (matrix[j][k] == '1') ++array[k];20 res = max(res, getArea(array, j-i+1));21 }22 }23 return res;24 }25 };

 

可以使用动态规划优化到O(n^2),下面的代码12ms AC。构造一个新的矩阵dp,dp[i][j]表示以点(i, j)为右下角的正方形的边长;状态转移方程:

dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1])) + 1;

对于题目所给的例子就有:

1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0

转化成:

1 0 1 0 01 0 1 1 11 1 1 2 11 0 0 1 0
1 class Solution { 2 public: 3     int maximalSquare(vector
>& matrix) { 4 if (matrix.empty() || matrix[0].empty()) return 0; 5 int M = matrix.size(), N = matrix[0].size(), res = 0; 6 vector
> dp(M, vector
(N, 0)); 7 for (int i = 0; i < M; ++i) if (matrix[i][0] == '1') { 8 dp[i][0] = 1; res = 1; 9 }10 for (int j = 0; j < N; ++j) if (matrix[0][j] == '1') {11 dp[0][j] = 1; res = 1;12 }13 for (int i = 1; i < M; ++i) {14 for (int j = 1; j < N; ++j) {15 if (matrix[i][j] == '1') 16 dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1])) + 1;17 res = max(res, dp[i][j]);18 }19 }20 return res * res;21 }22 };

 

转载地址:http://uqngx.baihongyu.com/

你可能感兴趣的文章
微软职位内部推荐-Senior Software Engineer II-Sharepoint
查看>>
sql 字符串操作
查看>>
【转】Android布局优化之ViewStub
查看>>
网络安全管理技术作业-SNMP实验报告
查看>>
根据Uri获取文件的绝对路径
查看>>
Flutter 插件开发:以微信SDK为例
查看>>
.NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?...
查看>>
边缘控制平面Ambassador全解读
查看>>
Windows Phone 7 利用计时器DispatcherTimer创建时钟
查看>>
程序员最喜爱的12个Android应用开发框架二(转)
查看>>
vim学习与理解
查看>>
DIRECTSHOW在VS2005中PVOID64问题和配置问题
查看>>
MapReduce的模式,算法以及用例
查看>>
《Advanced Linux Programming》读书笔记(1)
查看>>
zabbix agent item
查看>>
一步一步学习SignalR进行实时通信_7_非代理
查看>>
AOL重组为两大业务部门 全球裁员500人
查看>>
字符设备与块设备的区别
查看>>
为什么我弃用GNOME转向KDE(2)
查看>>
Redis学习记录初篇
查看>>