मान लीजिए कि हमारे पास 0 और 1 से भरा एक 2D बाइनरी मैट्रिक्स है। हमें केवल 1 वाला सबसे बड़ा वर्ग ज्ञात करना है और उसका क्षेत्रफल वापस करना है। तो अगर मैट्रिक्स की तरह है -
1 | 0 | 1 | 0 | 0 |
1 | 0 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 1 |
1 | 0 | 0 | 1 | 0 |
तब आउटपुट 4
. होगाइसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
उत्तर:=0, एन:=पंक्तियों की संख्या, सी:=पंक्तियों की संख्या
-
अगर n 0 है, तो वापस 0
-
क्रम का एक और मैट्रिक्स बनाएं (n x c)
-
मैं के लिए 0 से n - 1 की सीमा में
-
j के लिए 0 से c - 1 की सीमा में
-
m[i, j] :=मैट्रिक्स[i, j]
-
Ans :=अधिकतम m[i, j] और ans
-
-
-
j के लिए 0 से c - 1 की सीमा में
-
अगर m[i, j] 0 नहीं है, तो
-
m[i, j] :=1 + न्यूनतम m[i + 1, j], m[i, j-1], m[i + 1, j-1],
-
-
Ans :=अधिकतम m[i, j] और ans
-
-
उत्तर* उत्तर दें
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; class Solution { public: int maximalSquare(vector<vector<char>>& matrix) { int ans = 0; int n = matrix.size(); if(!n)return 0; int c = matrix[0].size(); vector<vector<int>> m(n, vector <int> (c)); for(int i =0;i<n;i++){ for(int j = 0; j<c;j++){ m[i][j] = matrix[i][j] - '0'; ans = max(m[i][j],ans); } } for(int i =n-2;i>=0;i--){ for(int j =1;j<c;j++){ if(m[i][j]){ m[i][j] = 1 + min({m[i+1][j],m[i][j-1],m[i+1][j-1]}); } ans = max(ans,m[i][j]); } } return ans*ans; } }; main(){ vector<vector<char>> v = {{'1','0','1','0','0'},{'1','0','1','1','1'},{'1','1','1','1','1'}, {'1','0','0','1','0'}}; Solution ob; cout << ((ob.maximalSquare(v))); }
इनपुट
[["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
आउटपुट
4