Given a picture consisting of black and white pixels, find the number of black lonely pixels.
The picture is represented by a 2D char array consisting of 'B' and 'W', which means black and white pixels respectively.
A black lonely pixel is character 'B' that located at a specific position where the same row and same column don't have any other black pixels.
Example:
Input: [['W', 'W', 'B'], ['W', 'B', 'W'], ['B', 'W', 'W']] Output: 3 Explanation: All the three 'B's are black lonely pixels.
Note:
- The range of width and height of the input 2D array is [1,500].
這道題定義了一種孤獨的黑像素,就是該黑像素所在的行和列中沒有其他的黑像素,讓我們找出所有的這樣的像素。那么既然對於每個黑像素都需要查找其所在的行和列,為了避免重復查找,我們可以統一的掃描一次,將各行各列的黑像素的個數都統計出來,然后再掃描所有的黑像素一次,看其是否是該行該列唯一的存在,是的話就累加計數器即可,參見代碼如下:
class Solution { public: int findLonelyPixel(vector<vector<char>>& picture) { if (picture.empty() || picture[0].empty()) return 0; int m = picture.size(), n = picture[0].size(), res = 0; vector<int> rowCnt(m, 0), colCnt(n, 0); for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (picture[i][j] == 'B') { ++rowCnt[i]; ++colCnt[j]; } } } for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (picture[i][j] == 'B') { if (rowCnt[i] == 1 && colCnt[j] == 1) { ++res; } } } } return res; } };