===
===
孤独像素 I 解题分析
一、题目描述
给定一个大小为 m x n 的图像 picture ,图像由黑白像素组成,其中 'B' 表示黑色像素,'W' 表示白色像素。我们需要统计并返回图像中黑色孤独像素的数量。黑色孤独像素的定义为:如果黑色像素 'B' 所在的同一行和同一列不存在其他黑色像素,那么这个黑色像素就是黑色孤独像素。
二、示例分析
- 示例 1
-
输入:
picture = [["W","W","B"],["W","B","W"],["B","W","W"]] -
输出:
3 -
解释:全部三个
'B'都是黑色的孤独像素。在第一行中,只有一个'B',且该列也只有这一个'B';同理第二行和第三行的'B'也满足孤独像素的条件。
- 示例 2
-
输入:
picture = [["B","B","B"],["B","B","W"],["B","B","B"]] -
输出:
0 -
解释:每一行和每一列都有多个
'B',不存在满足孤独像素条件的黑色像素。
三、解题思路
- 统计每行每列的黑色像素数量
-
定义两个数组
rowCounts和colCounts,分别用于记录每一行和每一列中黑色像素的数量。 -
通过两层循环遍历
picture数组,当遇到'B'时,相应的行和列的计数加一。
- 统计孤独像素数量
-
再次遍历
rowCounts数组,当某一行的黑色像素数量为1时,说明该行可能存在孤独像素。 -
对于该行,遍历列,如果遇到
'B'且该列的黑色像素数量也为1,则该黑色像素为孤独像素,孤独像素数量加一。
四、代码实现
package _531;
importjava.util.HashSet;
publicclassLeetCode531{
publicintfindLonelyPixel(char[][] picture){
int m = picture.length, n = picture[0].length;
int[] rowCounts =newint[m];
int[] colCounts =newint[n];
for(int i =0; i < m; i++){
for(int j =0; j < n; j++){
if(picture[i][j]=='B'){
rowCounts[i]++;
colCounts[j]++;
}
}
}
int lonelyCount =0;
for(int i =0; i < m; i++){
if(rowCounts[i]==1){
for(int j =0; j < n; j++){
if(picture[i][j]=='B'&& colCounts[j]==1){
lonelyCount++;
}
}
}
}
return lonelyCount;
}
}
五、复杂度分析
本文使用 文章同步助手 同步