leetcode013-Maximal Square(dp)
来源:互联网 发布:微博怎么设置个性域名 编辑:程序博客网 时间:2024/05/19 02:21
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 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.
解题思路:
动态规划:
1.首先确定问题的状态是什么,我想的是dp(i,j):以当前位置(i,j)作为立足点,向左(i,j-1),向上(i-1,j),向左上(i-1,j-1)尽可能大地拓展正方形时能够得到的正方形大小。
2.然后思考限制正方形拓展的原因有哪些?
2.1当前位置(i,j)的值为0,那么以它作为立足点,根本无法拓展,dp(i,j)=0
2.2当往三个方向拓展时,必须确保三个方向的拓展同程序进行,当其中某个方向无法拓展时立即终止。
现在,让我们把右下角的元素设为1。当拓展的step为1时,左、左上、上三个方向的拓展都没有问题;但当拓展的step为 2时却无法完成,因为左边方向无法形成边长为2的局部正方形。
因此,正方形的大小受到三个方向中能保证的最小局部正方形大小的限制。
3.思考状态转移方程,即如何由三个方向中的局部正方形的大小得到当前位置(i,j)的拓展正方形大小?
dp(i, j-1),dp(i-1, j),dp(i-1, j-1)分别代表三个方向上的局部正方形大小,由于2提到的受限,我们只需关注三者中最小的正方形大小,记为S
取S的平方,即最小局部正方形的边长,由于当前位置为1且是即将形成的新正方形的右下角,因此S+1是新的边长。
dp(i,j) = (sqrt(min{dp(i, j-1),dp(i-1, j),dp(i-1, j-1)})+1)^2
class Solution {public: int maximalSquare(vector<vector<char>>& matrix) { int m = matrix.size(); if (m == 0) return 0; int n = matrix[0].size(); if (n == 0) return 0; vector<vector<int>> dp(m,vector<int>(n,0)); int mini = 0; int temp = 0; int result = 0; for (int i = 0; i < n; i++) { dp[0][i] = matrix[0][i]-'0'; result = dp[0][i] > result ? dp[0][i] : result; } for (int i = 0; i < m; i++) { dp[i][0] = matrix[i][0]-'0'; result = dp[i][0] > result ? dp[i][0] : result; } for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { mini = min(dp[i-1][j],dp[i][j-1]); mini = min(mini,dp[i-1][j-1]); temp = sqrt(mini); if (matrix[i][j] > '0') { dp[i][j] = (temp+1)*(temp+1); } if (dp[i][j] > result) result =dp[i][j]; } } return result; }};
- leetcode013-Maximal Square(dp)
- LeetCode Maximal Square DP
- leetcode----DP----Maximal Square
- leetcode -- Maximal Square -- DP重点
- [Leetcode] #221 Maximal Square (DP)
- [LeetCode] Maximal Square(!!!!DP优化)
- Leetcode 221 - Maximal Square(dp)
- DP (9) -- Maximal Square, Maximal Rectangle,House Robber II
- Maximal Square
- Maximal Square
- Maximal Square
- Maximal Square
- Maximal Square
- Maximal Square
- Maximal Square
- Maximal Square
- Maximal Square
- Maximal Square
- es6新特性之generator
- Codeforce 868 C Qualification Rounds (计数原理)
- 多媒体编辑模块架构设计
- HDU5655
- 达内课程-高级流/操作流BufferedOutputStream/BufferedInputStream
- leetcode013-Maximal Square(dp)
- Django的国际化
- 对象构造和初始化
- hexo yilia主题添加文章访问量统计
- intellij tab键改为4个空格
- Java【集合系列】-08-List总结(LinkedList, ArrayList等使用场景和性能分析)
- 【计算机视觉】分辨率与超分辨率图像重建
- bzoj十一月份月赛 Problem A: 组题
- redis cluster的安装