Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 067fabe

Browse files
committed
feat: add solutions to lc problem: No.0533.Lonely Pixel II
1 parent a96fe84 commit 067fabe

File tree

6 files changed

+566
-11
lines changed

6 files changed

+566
-11
lines changed

‎solution/0500-0599/0533.Lonely Pixel II/README.md‎

Lines changed: 193 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,27 +49,218 @@ N = 3
4949

5050
<p>&nbsp;</p>
5151

52-
5352
## 解法
5453

5554
<!-- 这里可写通用的实现逻辑 -->
5655

56+
"哈希表"实现。
57+
5758
<!-- tabs:start -->
5859

5960
### **Python3**
6061

6162
<!-- 这里可写当前语言的特殊实现逻辑 -->
6263

6364
```python
64-
65+
class Solution:
66+
def findBlackPixel(self, picture: List[List[str]], target: int) -> int:
67+
m, n = len(picture), len(picture[0])
68+
rows = [0] * m
69+
cols = collections.defaultdict(list)
70+
for i in range(m):
71+
for j in range(n):
72+
if picture[i][j] == 'B':
73+
rows[i] += 1
74+
cols[j].append(i)
75+
t = [[False] * m for _ in range(m)]
76+
for i in range(m):
77+
for k in range(i, m):
78+
if i == k:
79+
t[i][k] = True
80+
else:
81+
t[i][k] = all([picture[i][j] == picture[k][j] for j in range(n)])
82+
t[k][i] = t[i][k]
83+
res = 0
84+
for i in range(m):
85+
if rows[i] == target:
86+
for j in range(n):
87+
if len(cols[j]) == target and all([t[i][k] for k in cols[j]]):
88+
res += 1
89+
return res
6590
```
6691

6792
### **Java**
6893

6994
<!-- 这里可写当前语言的特殊实现逻辑 -->
7095

7196
```java
97+
class Solution {
98+
public int findBlackPixel(char[][] picture, int target) {
99+
int m = picture.length, n = picture[0].length;
100+
int[] rows = new int[m];
101+
Map<Integer, List<Integer>> cols = new HashMap<>();
102+
for (int i = 0; i < m; ++i) {
103+
for (int j = 0; j < n; ++j) {
104+
if (picture[i][j] == 'B') {
105+
++rows[i];
106+
cols.computeIfAbsent(j, k -> new ArrayList<>()).add(i);
107+
}
108+
}
109+
}
110+
boolean[][] t = new boolean[m][m];
111+
for (int i = 0; i < m; ++i) {
112+
for (int k = i; k < m; ++k) {
113+
t[i][k] = i == k || all(picture[i], picture[k]);
114+
t[k][i] = t[i][k];
115+
}
116+
}
117+
int res = 0;
118+
for (int i = 0; i < m; ++i) {
119+
if (rows[i] == target) {
120+
for (int j = 0; j < n; ++j) {
121+
List<Integer> col = cols.get(j);
122+
if (col != null && col.size() == target) {
123+
boolean check = true;
124+
for (int k : col) {
125+
check = check && t[i][k];
126+
}
127+
if (check) {
128+
++res;
129+
}
130+
}
131+
}
132+
}
133+
}
134+
return res;
135+
}
136+
137+
private boolean all(char[] row1, char[] row2) {
138+
int n = row1.length;
139+
for (int j = 0; j < n; ++j) {
140+
if (row1[j] != row2[j]) {
141+
return false;
142+
}
143+
}
144+
return true;
145+
}
146+
}
147+
```
148+
149+
### **C++**
150+
151+
```cpp
152+
class Solution {
153+
public:
154+
int findBlackPixel(vector<vector<char>>& picture, int target) {
155+
int m = picture.size(), n = picture[0].size();
156+
vector<int> rows(m);
157+
unordered_map<int, vector<int>> cols;
158+
for (int i = 0; i < m; ++i)
159+
{
160+
for (int j = 0; j < n; ++j)
161+
{
162+
if (picture[i][j] == 'B')
163+
{
164+
++rows[i];
165+
cols[j].push_back(i);
166+
}
167+
}
168+
}
169+
vector<vector<bool>> t(m, vector<bool>(m, false));
170+
for (int i = 0; i < m; ++i)
171+
{
172+
for (int k = i; k < m; ++k)
173+
{
174+
t[i][k] = i == k || all(picture[i], picture[k]);
175+
t[k][i] = t[i][k];
176+
}
177+
}
178+
int res = 0;
179+
for (int i = 0; i < m; ++i)
180+
{
181+
if (rows[i] == target)
182+
{
183+
for (int j = 0; j < n; ++j)
184+
{
185+
if (cols[j].size() == target)
186+
{
187+
bool check = true;
188+
for (int k : cols[j]) check = check && t[i][k];
189+
if (check) ++res;
190+
}
191+
}
192+
}
193+
}
194+
return res;
195+
}
196+
197+
bool all(vector<char>& row1, vector<char>& row2) {
198+
int n = row1.size();
199+
for (int j = 0; j < n; ++j)
200+
if (row1[j] != row2[j]) return false;
201+
return true;
202+
}
203+
};
204+
```
205+
206+
### **Go**
207+
208+
```go
209+
func findBlackPixel(picture [][]byte, target int) int {
210+
m, n := len(picture), len(picture[0])
211+
rows := make([]int, m)
212+
cols := make(map[int][]int)
213+
for i := 0; i < m; i++ {
214+
for j := 0; j < n; j++ {
215+
if picture[i][j] == 'B' {
216+
rows[i]++
217+
cols[j] = append(cols[j], i)
218+
}
219+
}
220+
}
221+
t := make([][]bool, m)
222+
for i := 0; i < m; i++ {
223+
t[i] = make([]bool, m)
224+
}
225+
for i := 0; i < m; i++ {
226+
for k := i; k < m; k++ {
227+
if i == k {
228+
t[i][k] = true
229+
} else {
230+
t[i][k] = all(picture[i], picture[k])
231+
}
232+
t[k][i] = t[i][k]
233+
}
234+
}
235+
res := 0
236+
for i := 0; i < m; i++ {
237+
if rows[i] == target {
238+
for j := 0; j < n; j++ {
239+
col, ok := cols[j]
240+
if ok && len(col) == target {
241+
check := true
242+
for _, k := range col {
243+
check = check && t[i][k]
244+
}
245+
if check {
246+
res++
247+
}
248+
}
249+
}
250+
}
251+
}
252+
return res
253+
}
72254

255+
func all(row1, row2 []byte) bool {
256+
n := len(row1)
257+
for i := 0; i < n; i++ {
258+
if row1[i] != row2[i] {
259+
return false
260+
}
261+
}
262+
return true
263+
}
73264
```
74265

75266
### **...**

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /