【LeetCode從零單排】No221.Maximal Square
題目
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 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0Return 4.
解法很巧妙,我也是看了discuss,首先列出最左一列和最上面一列,剩下的解法可以看這個
Basic idea is to iterate over all columns and rows of a matrix (starting with i=j=1). If value in a cell>0 and cells to the north, west, and north-west are >0, pick smallest value of those 3 cells, take it's square root, add 1, and assign square of new value to current cell. For example given matrix
1 1 1 1 1 1
1 1 1 0 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 0 1
We get:
1 1 1 1 1 1
1 4 4 0 1 4
1 4 9 1 1 4
1 4 9 4 4 4
1 4 9 9 9 9
1 4 9 16 0 1
Our answer is the largest value in new matrix: 16
程式碼
public class Solution {
public int maximalSquare(char[][] matrix) {
if(matrix == null || matrix.length == 0) {
return 0;
}
int res = 0;
int m = matrix.length;
int n = matrix[0].length;
int[][] sq = new int[m][n];
for(int i = 0; i < m; i++) {
if(matrix[i][0] == '1') {
sq[i][0] = 1;
res = 1;
} else {
sq[i][0] = 0;
}
}
for(int j = 0; j < n; j++) {
if(matrix[0][j] == '1') {
sq[0][j] = 1;
res = 1;
} else {
sq[0][j] = 0;
}
}
for(int i = 1; i < m; i++) {
for(int j = 1; j < n; j++) {
if(matrix[i][j] == '1') {
int min = Math.min(Math.min(sq[i][j-1], sq[i-1][j]), sq[i-1][j-1]);
//if(min != 0) {
sq[i][j] = (int)Math.pow(Math.sqrt(min)+1, 2);
res = Math.max(res, sq[i][j]);
//}
}
}
}
return res;
}
}
/********************************
* 本文來自部落格 “李博Garvin“
* 轉載請標明出處:http://blog.csdn.net/buptgshengod
******************************************/
相關文章
- Mysql從零單排-1MySql
- 從零單排學Redis【黃金】Redis
- 從零單排學Redis【白銀】Redis
- 從零單排學Redis【鉑金一】Redis
- 從零單排學Redis【鉑金二】Redis
- SpringBoot從零單排 ------初級入門篇Spring Boot
- 【3y】從零單排學Redis【青銅】Redis
- 「從零單排canal 03」 canal原始碼分析大綱原始碼
- 「從零單排canal 05」 server模組原始碼解析Server原始碼
- 「從零單排canal 07」 parser模組原始碼解析原始碼
- 從零單排,使用 Netty 構建 IM 聊天室~Netty
- 「從零單排canal 06」 instance模組原始碼解析原始碼
- Laravel 從零單排系列教程 01 :Homestead 環境搭建Laravel
- 三分鐘從零單排js靜態檢查JS
- Spring AOP從零單排-織入時期原始碼分析Spring原始碼
- leetcode 593. Valid Square練習LeetCode
- leetcode 593. Valid Square 練習LeetCode
- 「從零單排canal 04」 啟動模組deployer原始碼解析原始碼
- 「從零單排HBase 10」HBase叢集多租戶實踐
- 從零開始單排學設計模式「策略模式」黑鐵 II設計模式
- 從零開始單排學設計模式「UML類圖」定級賽設計模式
- 最新【從零單排】系列流出,教你如何實現字典儲存結構
- 從零開始單排學設計模式「裝飾模式」黑鐵 I設計模式
- 從零開始實現簡單 RPC 框架 3:配置匯流排 URLRPC框架
- leetcode 283. 移動零(簡單)LeetCode
- 從零開始單排學設計模式「簡單工廠設計模式」黑鐵 III設計模式
- 從零單排Java 8(3) —— List結合Lambdas對排序的高階用法Java排序
- 「從零單排canal 01」 canal 10分鐘入門(基於1.1.4版本)
- 從零打卡leetcode之day 1--兩數之和LeetCode
- 從零打卡leetcode之day 2---兩數相加LeetCode
- 「從零單排canal 02」canal叢集版 + admin控制檯 最新搭建姿勢(基於1.1.4版本)
- LeetCode 621 任務排程器LeetCode
- D - Square PairAI
- LeetCode:移動零(java)LeetCodeJava
- 從零開始入門 K8s | 排程器的排程流程和演算法介紹K8S演算法
- leetcode_283. 移動零LeetCode
- Leetcode 322 零錢兌換LeetCode
- 從零打卡leetcode之day 4--無重複最長字串LeetCode字串
- 從零開始的簡單光線追蹤示例