C ++中的孤独像素I

假设我们有一幅由黑白像素组成的图片,我们必须找到黑色孤独像素的数量。在此,图片由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