ধরুন আমাদের একটি 2D বাইনারি ম্যাট্রিক্স আছে যেখানে 0s এবং 1 মান রয়েছে। আমাদের শুধুমাত্র 1s সম্বলিত বৃহত্তম আয়তক্ষেত্র খুঁজে বের করতে হবে এবং এর ক্ষেত্রফল দিতে হবে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব−
-
getAns নামক একটি ফাংশন সংজ্ঞায়িত করুন, এটি একটি অ্যারে নেবে
-
স্ট্যাক তৈরি করুন, i :=0, উত্তর :=0
-
যখন সেন্টটি খালি নয়
-
উচ্চতা :=a [st এর শীর্ষ], স্ট্যাক থেকে মুছুন
-
প্রস্থ :=যখন st খালি থাকে তখন a-এর মাপ, অন্যথায় a - st-এর শীর্ষ - 1
-
এলাকা:=উচ্চতা * প্রস্থ
-
উত্তর :=উত্তর এবং ক্ষেত্রফলের সর্বোচ্চ
-
-
উত্তর ফেরত দিন
-
প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
-
উত্তর :=0, n :=x এর আকার
-
যদি n শূন্য হয়, তাহলে 0
ফেরত দিন -
m :=x[0]
এর আকার -
m
আকারের একটি অ্যারে উচ্চতা তৈরি করুন -
0 থেকে n – 1
রেঞ্জের i জন্য-
j-এর জন্য 0 থেকে m – 1
পরিসরে-
যদি x[i, j] =1 হয়, তাহলে উচ্চতা[j] 1 দ্বারা বাড়ান, অন্যথায় উচ্চতা[j] :=0
-
-
ans :=ans এর সর্বোচ্চ এবং getAns(উচ্চতা)
-
-
উত্তর ফেরত দিন
উদাহরণ (C++)
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int getAns(vector <int> a){
stack <int> st;
int i = 0;
int ans = 0;
while(i<a.size()){
if(st.empty()||a[i]>=a[st.top()]){
st.push(i);
i++;
} else{
int height = a[st.top()];
st.pop();
int width = st.empty()?i:i-st.top()-1;
int area = height * width;
ans = max(ans,area);
}
}
while(!st.empty()){
int height = a[st.top()];
st.pop();
int width = st.empty()?a.size():a.size() - st.top()-1;
int area = height * width;
ans = max(ans,area);
}
return ans;
}
int maximalRectangle(vector<vector<char>>& x) {
int ans = 0;
int n = x.size();
if(!n)return 0;
int m = x[0].size();
vector <int> height(m);;
for(int i =0;i<n;i++){
for(int j =0;j<m;j++){
if(x[i][j] == '1')height[j]++;
else height[j] = 0;
}
ans = max(ans, getAns(height));
}
return 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.maximalRectangle(v));
} ইনপুট
{{'1','0','1','0','0'},
{'1','0','1','1','1'},
{'1','1','1','1','1'},
{'1','0','0','1','0'}
} আউটপুট
6