ধরুন আমাদের একটি 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