假设我们有一幅由黑白像素组成的图片,我们必须找到黑色孤独像素的数量。在此,图片由2D字符数组表示,该数组分别由“ B”和“ W”组成,分别用于黑色和白色像素。
黑色孤独像素实际上是“ B”,它位于特定的位置,在该位置同一行和同一列没有任何其他黑色像素。
如果输入像-
W | W | B |
W | B | W |
B | W | W |
输出将为3。因为所有三个“ B”都是黑色的孤独像素。
为了解决这个问题,我们将遵循以下步骤-
n:=图片大小
m:=(如果n为非零,则为列大小,否则为0)
定义两个数组,行和列的大小为n
ret:= 0,firstRow:= 0
对于初始化i:= 0,当i <n时,更新(将i增加1),执行-
如果picture [i,j]与'B'相同,则-
(将图片[i,0]增加1)
(将firstRow增加1)
(将picture [0,j]增大1)
如果picture [0,j] <'Y'并且picture [0,j]不等于'V',则-
如果我等于0,则-
否则,当picture [i,0] <'Y'并且picture [i,0]不等于'V'时,则-
对于初始化j:= 0,当j <m时,更新(将j增加1),执行-
对于初始化i:= 0,当i <n时,更新(将i增加1),执行-
如果picture [i,j] <'W'并且(picture [0,j]与'C'相同或picture [0,j]与'X'相同),则-
(增加ret 1)
ret:=(如果ret + firstRow与1相同,则为1,否则为0)
如果我等于0,则-
否则,当picture [i,0]与'C'相同或picture [i,0]与'X'相同时,则-
对于初始化j:= 0,当j <m时,更新(将j增加1),执行-
返回ret
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: int findLonelyPixel(vector<vector<char>>& picture) { int n = picture.size(); int m = n ? picture[0].size() : 0; vector<int< row(n); vector<int< col(m); int ret = 0; int firstRow = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (picture[i][j] == 'B') { if (picture[0][j] < 'Y' && picture[0][j] != 'V'){ picture[0][j]++; } if (i == 0) firstRow++; else if (picture[i][0] < 'Y' && picture[i][0] != 'V') { picture[i][0]++; } } } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (picture[i][j] < 'W' && (picture[0][j] == 'C' || picture[0][j] == 'X')) { if (i == 0) ret += firstRow == 1 ? 1 : 0; else if (picture[i][0] == 'C' || picture[i][0] == 'X') ret++; } } } return ret; } }; main(){ Solution ob; vector<vector<char>> v = {{'W','W','B'},{'W','B','W'},{'B','W','W'}}; cout << (ob.findLonelyPixel(v)); }
{{'W','W','B'},{'W','B','W'},{'B','W','W'}}
输出结果
3