public class Solution {
public int findBlackPixel(char[][] picture, int N) {
int m = picture.length, n = picture[0].length;
int[] row = new int[m], col = new int[n];
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; ++j) {
if(picture[i][j] == 'B') {
row[i]++;
col[j]++;
}
}
}
int count = 0;
for(int j = 0; j < n; j++) {
if(col[j] == N) {
List<Integer> list = new ArrayList<>();
int num = 0;
for(int i = 0; i < m; ++i) {
if(picture[i][j] == 'B' && row[i] == N) {
num++;
}
if(picture[i][j] == 'B') list.add(i);
}
if(num > 0) {
boolean flag = true;
for(int x = 1; x < list.size(); ++x) {
if(!Arrays.equals(picture[list.get(x)], picture[list.get(x  1)])){
flag = false;
break;
}
}
if(flag) count += num;
}
}
}
return count;
}
}
Easy Java Solution(beats 90% solutions)


@rsrs3 Thank you for sharing! I think this is a great solution, simple and fast! I have one suggestion for improvement. In the for loop of columns, we can avoid the list and use a int variable denoting the previous row instead. This can save a little space and time.
//check the number of pixels in each column and if it has N pixels //check if each row of its pixels has N pixels and is identical to each other for (int j = 0; j < picture[0].length; j++) { if (columns[j] == N) { boolean valid = false; int prevRow = 1; for (int i = 0; i < picture.length; i++) { if (picture[i][j] == 'B') { if (prevRow == 1 && row[i] == N  row[i] == N && Arrays.equals(picture[prevRow], picture[i])) { prevRow = i; valid = true; } else { valid = false; break; } } } if (valid) { result += N; } } }