मान लीजिए कि हमारे पास ब्लैक एंड व्हाइट पिक्सल से युक्त एक तस्वीर है, हमें ब्लैक पिक्सल की संख्या का पता लगाना है, जो पंक्ति आर और कॉलम सी में मौजूद हैं। यह निम्नलिखित सभी नियमों के साथ संरेखित है -
-
R और C में बिल्कुल N ब्लैक पिक्सेल होंगे
-
उन सभी पंक्तियों के लिए, जिनका स्तंभ C पर एक काला पिक्सेल है, वे बिल्कुल पंक्ति R के समान होनी चाहिए।
यहां चित्र को 2डी चार सरणी द्वारा दर्शाया गया है जिसमें क्रमशः ब्लैक एंड व्हाइट पिक्सल के लिए 'बी' और 'डब्ल्यू' शामिल हैं।
अगर इनपुट इस तरह है -
W | बी | डब्ल्यू | बी | बी | डब्ल्यू |
W | बी | डब्ल्यू | बी | बी | डब्ल्यू |
W | बी | डब्ल्यू | बी | बी | डब्ल्यू |
W | डब्ल्यू | बी | डब्ल्यू | बी | डब्ल्यू |
और एन =3, तो आउटपुट 6 होगा। क्योंकि सभी बोल्ड 'बी' ब्लैक पिक्सल हैं, सभी 'बी' कॉलम 1 और 3 पर हैं। अब अगर हम 'बी' को पंक्ति आर =0 और कॉलम सी =1 पर लेते हैं। तो उदाहरण के लिए:नियम 1, पंक्ति आर =0 और कॉलम सी =1 दोनों में बिल्कुल एन 'बी' पिक्सेल हैं। और नियम 2, पंक्तियों में कॉलम C =1 पर 'B' पिक्सेल है, पंक्ति 0, पंक्ति 1 और पंक्ति 2 हैं। वे बिल्कुल पंक्ति R =0 के समान हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
रिट:=0
-
एक मानचित्र और दूसरे मानचित्र को परिभाषित करें c
-
n :=p की पंक्ति गणना, m :=p की स्तंभ संख्या
-
इनिशियलाइज़ i :=0 के लिए, जब i
-
इनिशियलाइज़ j :=0 के लिए, जब j
-
यदि p[i, j] 'B' के समान है, तो -
-
r[i]
. में j डालें -
c[j]
. में i डालें
-
-
-
-
इनिशियलाइज़ i :=0 के लिए, जब i
-
इनिशियलाइज़ j :=0 के लिए, जब j
-
यदि p[i, j] 'B' के समान है और r[i] का आकार N के समान है और c[j] का आकार N के समान है, तो -
-
ठीक :=सच
-
c[j] में प्रत्येक x के लिए, करें
-
यदि r[x], r[i] के बराबर नहीं है, तो -
-
ठीक :=असत्य
-
लूप से बाहर आएं
-
-
-
रिट:=रिट + ओके
-
-
-
-
वापसी रिट
उदाहरण (C++)
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; class Solution { public: int findBlackPixel(vector<vector<char>>& p, int N) { int ret = 0; unordered_map <int, set <int> > r, c; int n = p.size(); int m = p[0].size(); for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ if(p[i][j] == 'B'){ r[i].insert(j); c[j].insert(i); } } } for(int i = 0; i < n; i++){ for(int j = 0; j < m && r.count(i); j++){ if(p[i][j] == 'B' && r[i].size() == N && c[j].size() == N){ bool ok = true; for(auto& x : c[j]){ if(r[x] != r[i]){ ok = false; break; } } ret += ok; } } } return ret; } }; main(){ Solution ob; vector<vector<char>> v = {{'W','B','W','B','B','W'},{'W','B','W','B','B','W'},{'W','B','W','B' ,'B','W'},{'W','W','B','W','B','W'}}; cout << (ob.findBlackPixel(v, 3)); }
इनपुट
{{'W','B','W','B','B','W'},{'W','B','W','B','B','W'},{'W','B','W','B' ,'B','W'},{'W','W','B','W','B','W'}}, 3
आउटपुट
6