मान लीजिए कि हमारे पास एक मैट्रिक्स है, और एक लक्ष्य मूल्य है, हमें गैर-रिक्त सबमैट्रिसेस की संख्या का पता लगाना है जो योग लक्ष्य के समान है। यहां एक सबमैट्रिक्स [(x1, y1), (x2, y2)] सभी सेल मैट्रिक्स [x] [y] का सेट है, जिसमें x रेंज x1 और x2 और y रेंज y1 और y2 में है। दो सबमैट्रिस [(x1, y1), (x2, y2)] और [(x1', y1'), (x2', y2')] अलग हैं यदि उनके पास कुछ निर्देशांक हैं जो अलग हैं:जैसे, यदि x1 नहीं है X1' के समान।
तो, अगर इनपुट पसंद है
| 0 | 1 | 0 |
| 1 | 1 | 1 |
| 0 | 1 | 0 |
और लक्ष्य =0, तो आउटपुट 4 होगा, ऐसा इसलिए है क्योंकि चार 1x1 सबमैट्रिस जिसमें केवल 0 होता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
उत्तर:=0
-
col :=स्तंभों की संख्या
-
पंक्ति :=पंक्तियों की संख्या
-
इनिशियलाइज़ करने के लिए:=0, जब मैं <पंक्ति, अपडेट (i 1 से बढ़ाएँ), करें -
-
इनिशियलाइज़ j :=1 के लिए, जब j
-
मैट्रिक्स [i, j]:=मैट्रिक्स [i, j] + मैट्रिक्स [i, j - 1]
-
-
-
एक नक्शा परिभाषित करें मी
-
इनिशियलाइज़ करने के लिए मैं :=0, जब i
-
इनिशियलाइज़ j :=i के लिए, जब j
-
नक्शा साफ़ करें मी
-
मी[0] :=1
-
योग :=0
-
-
k :=0 को इनिशियलाइज़ करने के लिए, जब k <रो, अपडेट (k को 1 से बढ़ाएँ), करें -
-
वर्तमान:=मैट्रिक्स [के, जे]
-
अगर मैं - 1>=0, तो -
-
करंट:=करंट - मैट्रिक्स [k, i - 1]
-
-
योग :=योग + वर्तमान
-
उत्तर:=उत्तर + एम [लक्ष्य - योग]
-
m[-sum] को 1 से बढ़ाएं
-
-
-
वापसी उत्तर
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int numSubmatrixSumTarget(vector<vector<int>>& matrix, int
target) {
int ans = 0;
int col = matrix[0].size();
int row = matrix.size();
for(int i = 0; i < row; i++){
for(int j = 1; j < col; j++){
matrix[i][j] += matrix[i][j - 1];
}
}
unordered_map <int, int> m;
for(int i = 0; i < col; i++){
for(int j = i; j < col; j++){
m.clear();
m[0] = 1;
int sum = 0;
for(int k = 0; k < row; k++){
int current = matrix[k][j];
if(i - 1 >= 0)current -= matrix[k][i - 1];
sum += current;
ans += m[target - sum];
m[-sum]++;
}
}
}
return ans;
}
};
main(){
Solution ob;
vector<vector<int>> v = {{0,1,0},{1,1,1},{0,1,0}};
cout << (ob.numSubmatrixSumTarget(v, 0));
} इनपुट
{{0,1,0},{1,1,1},{0,1,0}}, 0 आउटपुट
4