C++中的孤獨畫素 I


假設我們有一張由黑白畫素組成的圖片,我們需要找到黑色孤獨畫素的數量。這裡圖片由一個二維字元陣列表示,其中 'B' 代表黑色畫素,'W' 代表白色畫素。

黑色孤獨畫素實際上是指位於特定位置的 'B',在同一行和同一列中沒有其他黑色畫素。

如果輸入如下:

WWB
WBW
BWW

輸出將為 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

更新於:2020年11月19日

173 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.