Given an
m x n binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area.Example 1:
Input: matrix = {{'0','1'},{'1','0'}}
Output: 1Approach
Java
public class MaximalSquare {public static void main(String[] args) {char matrix[][] = { { '0', '1' }, { '1', '0' } };System.out.println(maximalSquare(matrix));}static int maximalSquare(char[][] matrix) {int n = matrix.length;if (n == 0)return 0;int m = matrix[0].length;int res = 0;int dp[][] = new int[n + 1][m + 1];for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (matrix[i - 1][j - 1] == '1') {dp[i][j] = Math.min(dp[i][j - 1], Math.min(dp[i - 1][j],dp[i - 1][j - 1])) + 1;res = Math.max(res, dp[i][j]);}}}return res * res;}}
C++
#include <bits/stdc++.h>using namespace std;int maximalSquare(vector<vector<char>>& matrix){int n=matrix.size();if(n==0)return 0;int m=matrix[0].size();int res=0;int dp[n+1][m+1];memset(dp,0,sizeof(dp));for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(matrix[i-1][j-1]=='1'){dp[i][j]=min(dp[i][j-1],min(dp[i-1][j],dp[i-1][j-1]))+1;res=max(res,dp[i][j]);}}}return res*res;}int main(){vector<vector<char>> matrix = {{'0','1'},{'1','0'}};cout<<maximalSquare(matrix);return 0;}
No comments:
Post a Comment