ধরুন আমাদের একটি m x n ম্যাট্রিক্স ম্যাট এবং একটি পূর্ণসংখ্যা থ্রেশহোল্ড আছে। প্রদত্ত থ্রেশহোল্ডের চেয়ে কম বা সমান সমষ্টি সহ একটি বর্গক্ষেত্রের সর্বাধিক পার্শ্ব-দৈর্ঘ্যে আমাদের থাকতে হবে বা যদি এমন কোনও বর্গ না থাকে তবে 0 ফেরত দিতে হবে। তাই যদি ইনপুট −
এর মত হয়1 | 1 | 3 | 2 | 4 | ৷3 | 2 |
1 | 1 | 3 | 2 | 4 | ৷3 | 2 |
1 | 1 | ৷3 | 2 | 4 | ৷3 | 2 |
1 | 1 | 3 | 2 | 4 | ৷3 | 2 |
1 | 1 | 3 | 2 | 4 | ৷3 | 2 |
1 | 1 | 3 | 2 | 4 | ৷3 | 2 |
এবং থ্রেশহোল্ড হল 4, তাহলে আউটপুট হবে 2, যেহেতু পাশের দৈর্ঘ্য 2 এর দুটি বর্গক্ষেত্র আছে, তাই সর্বোচ্চ হল 2
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- ঠিক বলে একটি পদ্ধতি সংজ্ঞায়িত করুন, এটি x এবং ম্যাট্রিক্স m এবং থ্রেশহোল্ড লাগবে
- curr সেট করুন :=0
- আমি রেঞ্জ x – 1 থেকে ম্যাটের সারি সংখ্যা – 1
- এর জন্য
- c এর জন্য x - 1 থেকে ম্যাটের কলের সংখ্যা - 1
- curr :=mat[r, c]
- যদি c – x>=0 হয়, তাহলে mat[r, c – x] দ্বারা curr হ্রাস করুন
- যদি r – x>=0, তাহলে mat[r - x, c] দ্বারা curr হ্রাস করুন
- যদি c – x>=0 এবং r – x>=0, তাহলে mat[r – x, c - x] দ্বারা curr বাড়ান]
- যদি curr <=th, তারপর true ফেরত দিন
- c এর জন্য x - 1 থেকে ম্যাটের কলের সংখ্যা - 1
- মিথ্যে ফেরত দিন
- মূল পদ্ধতিতে, এটি ম্যাট্রিক্স এবং থ্রেশহোল্ড লাগবে
- r :=সারির সংখ্যা, c :=কলামের সংখ্যা, নিম্ন :=1, উচ্চ :=r এবং c এর মিনিট, উত্তর :=0
- আমি 1 থেকে c – 1
- পরিসরে
- 0 থেকে c – 1
- পরিসরে j-এর জন্য
- ম্যাট[j, i - 1] দ্বারা ম্যাট[j, i] বাড়ান]
- 0 থেকে c – 1
- আমি 1 থেকে r – 1
- পরিসরে
- 0 থেকে c – 1
- পরিসরে j-এর জন্য
- ম্যাট দ্বারা ম্যাট[j, i] বাড়ান[ i - 1,j]
- 0 থেকে c – 1
- যখন কম <=উচ্চ:
- মধ্য :=নিম্ন + (উচ্চ - নিম্ন) / 2
- যদি এর (মধ্য, মাট, ম), তাহলে উত্তর :=মধ্য এবং নিম্ন :=মধ্য + 1, অন্যথায় উচ্চ :=মধ্য - 1
- উত্তর ফেরত দিন
উদাহরণ(C++)
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#includenamespace ব্যবহার করে std;typedef long long int lli;class Solution {public:bool ok(int x, vector >&mat, int th){ lli current =0; for(int r =x - 1; r =0) বর্তমান -=ম্যাট[r][c-x]; if(r -x>=0)current -=mat[r - x][c]; যদি (c - x>=0 &&r - x>=0) বর্তমান +=ম্যাট[r-x][c-x]; যদি (বর্তমান <=থ) সত্যে ফিরে আসে; } } ফেরত মিথ্যা; } int maxSideLength(vector >&mat, int th) { int r =mat.size(); int c =mat[0].size(); int low =1; int high =min(r, c); int ans =0; for(int i =1; i > v ={{1,1,3,2,4,3,2},{1,1,3,2,4,3,2},{ 1,1,3,2,4,3,2}}; সমাধান ob; cout <<(ob.maxSideLength(v, 4));}
ইনপুট
<প্রে>[[1,1,3,2,4,3,2],[1,1,3,2,4,3,2],[1,1,3,2,4,3,2 ]]৪আউটপুট
2