C++中的孤独像素 I
假设我们有一张由黑白像素组成的图片,我们需要找到黑色孤独像素的数量。这里图片由一个二维字符数组表示,其中 'B' 代表黑色像素,'W' 代表白色像素。
黑色孤独像素实际上是指位于特定位置的 'B',在同一行和同一列中没有其他黑色像素。
如果输入如下:
W | W | B |
W | B | W |
B | W | W |
输出将为 3。因为所有三个 'B' 都是黑色孤独像素。
为了解决这个问题,我们将遵循以下步骤:
n := 图片大小
m := (如果 n 非零,则为列大小,否则为 0)
定义两个大小为 n 的数组 row 和 col
ret := 0, firstRow := 0
for initialize i := 0, when i < n, update (increase i by 1), do −
for initialize j := 0, when j < m, update (increase j by 1), do −
if picture[i, j] 等于 'B',则:
if picture[0, j] < 'Y' 且 picture[0, j] 不等于 'V',则:
(picture[0, j] 加 1)
if i 等于 0,则:
(firstRow 加 1)
否则,如果 picture[i, 0] < 'Y' 且 picture[i, 0] 不等于 'V',则:
(picture[i, 0] 加 1)
for initialize i := 0, when i < n, update (increase i by 1), do −
for initialize j := 0, when j < m, update (increase j by 1), do −
if picture[i, j] < 'W' 且 (picture[0, j] 等于 'C' 或 picture[0, j] 等于 'X'),则:
if i 等于 0,则:
ret := (如果 ret + firstRow 等于 1,则为 1,否则为 0)
否则,如果 picture[i, 0] 等于 'C' 或 picture[i, 0] 等于 'X',则:
(ret 加 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