Skip to content

Commit 01a7441

Browse files
committed
feat: add solutions to lc problem: No.1267
No.1267.Count Servers that Communicate
1 parent 5051375 commit 01a7441

File tree

7 files changed

+195
-153
lines changed

7 files changed

+195
-153
lines changed

solution/1200-1299/1267.Count Servers that Communicate/README.md

Lines changed: 70 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,13 @@
5656

5757
<!-- 这里可写通用的实现逻辑 -->
5858

59-
对每一行、每一列的服务器数量进行统计。
59+
**方法一:计数**
6060

61-
然后遍历每个服务器,若当前服务器所在的行或者列的服务器数量超过 1,说明当前服务器满足条件,累加结果 res
61+
我们可以统计每一行、每一列的服务器数量,然后遍历每个服务器,若当前服务器所在的行或者列的服务器数量超过 1,说明当前服务器满足条件,结果加 $1$
6262

63-
遍历结束后,返回 res 即可。
63+
遍历结束后,返回结果即可。
64+
65+
时间复杂度 $O(m \times n)$,空间复杂度 $O(m + n)$。其中 $m$ 和 $n$ 分别为矩阵的行数和列数。
6466

6567
<!-- tabs:start -->
6668

@@ -72,20 +74,18 @@
7274
class Solution:
7375
def countServers(self, grid: List[List[int]]) -> int:
7476
m, n = len(grid), len(grid[0])
75-
rows = [0] * m
76-
cols = [0] * n
77-
for i in range(m):
78-
for j in range(n):
79-
if grid[i][j] == 1:
80-
rows[i] += 1
81-
cols[j] += 1
82-
res = 0
77+
row = [0] * m
78+
col = [0] * n
8379
for i in range(m):
8480
for j in range(n):
85-
if grid[i][j] == 1:
86-
if rows[i] > 1 or cols[j] > 1:
87-
res += 1
88-
return res
81+
if grid[i][j]:
82+
row[i] += 1
83+
col[j] += 1
84+
return sum(
85+
grid[i][j] and (row[i] > 1 or col[j] > 1)
86+
for i in range(m)
87+
for j in range(n)
88+
)
8989
```
9090

9191
### **Java**
@@ -96,27 +96,25 @@ class Solution:
9696
class Solution {
9797
public int countServers(int[][] grid) {
9898
int m = grid.length, n = grid[0].length;
99-
int[] rows = new int[m];
100-
int[] cols = new int[n];
99+
int[] row = new int[m];
100+
int[] col = new int[n];
101101
for (int i = 0; i < m; ++i) {
102102
for (int j = 0; j < n; ++j) {
103103
if (grid[i][j] == 1) {
104-
++rows[i];
105-
++cols[j];
104+
row[i]++;
105+
col[j]++;
106106
}
107107
}
108108
}
109-
int res = 0;
109+
int ans = 0;
110110
for (int i = 0; i < m; ++i) {
111111
for (int j = 0; j < n; ++j) {
112-
if (grid[i][j] == 1) {
113-
if (rows[i] > 1 || cols[j] > 1) {
114-
++res;
115-
}
112+
if (grid[i][j] == 1 && (row[i] > 1 || col[j] > 1)) {
113+
++ans;
116114
}
117115
}
118116
}
119-
return res;
117+
return ans;
120118
}
121119
}
122120
```
@@ -128,57 +126,76 @@ class Solution {
128126
public:
129127
int countServers(vector<vector<int>>& grid) {
130128
int m = grid.size(), n = grid[0].size();
131-
vector<int> rows(m);
132-
vector<int> cols(n);
129+
vector<int> row(m), col(n);
133130
for (int i = 0; i < m; ++i) {
134131
for (int j = 0; j < n; ++j) {
135-
if (grid[i][j] == 1) {
136-
++rows[i];
137-
++cols[j];
132+
if (grid[i][j]) {
133+
++row[i];
134+
++col[j];
138135
}
139136
}
140137
}
141-
int res = 0;
138+
int ans = 0;
142139
for (int i = 0; i < m; ++i) {
143140
for (int j = 0; j < n; ++j) {
144-
if (grid[i][j] == 1) {
145-
if (rows[i] > 1 || cols[j] > 1) {
146-
++res;
147-
}
148-
}
141+
ans += grid[i][j] && (row[i] > 1 || col[j] > 1);
149142
}
150143
}
151-
return res;
144+
return ans;
152145
}
153146
};
154147
```
155148
156149
### **Go**
157150
158151
```go
159-
func countServers(grid [][]int) int {
152+
func countServers(grid [][]int) (ans int) {
160153
m, n := len(grid), len(grid[0])
161-
rows := make([]int, m)
162-
cols := make([]int, n)
163-
for i := 0; i < m; i++ {
164-
for j := 0; j < n; j++ {
165-
if grid[i][j] == 1 {
166-
rows[i]++
167-
cols[j]++
154+
row, col := make([]int, m), make([]int, n)
155+
for i := range grid {
156+
for j, x := range grid[i] {
157+
if x == 1 {
158+
row[i]++
159+
col[j]++
168160
}
169161
}
170162
}
171-
res := 0
172-
for i := 0; i < m; i++ {
173-
for j := 0; j < n; j++ {
174-
if grid[i][j] == 1 {
175-
if rows[i] > 1 || cols[j] > 1 {
176-
res++
177-
}
163+
for i := range grid {
164+
for j, x := range grid[i] {
165+
if x == 1 && (row[i] > 1 || col[j] > 1) {
166+
ans++
178167
}
179168
}
180169
}
181-
return res
170+
return
171+
}
172+
```
173+
174+
### **TypeScript**
175+
176+
```ts
177+
function countServers(grid: number[][]): number {
178+
const m = grid.length;
179+
const n = grid[0].length;
180+
const row = new Array(m).fill(0);
181+
const col = new Array(n).fill(0);
182+
for (let i = 0; i < m; i++) {
183+
for (let j = 0; j < n; j++) {
184+
if (grid[i][j] === 1) {
185+
row[i]++;
186+
col[j]++;
187+
}
188+
}
189+
}
190+
let ans = 0;
191+
for (let i = 0; i < m; i++) {
192+
for (let j = 0; j < n; j++) {
193+
if (grid[i][j] === 1 && (row[i] > 1 || col[j] > 1)) {
194+
ans++;
195+
}
196+
}
197+
}
198+
return ans;
182199
}
183200
```
184201

solution/1200-1299/1267.Count Servers that Communicate/README_EN.md

Lines changed: 65 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -59,20 +59,18 @@ Return the number of servers&nbsp;that communicate with any other server.</p>
5959
class Solution:
6060
def countServers(self, grid: List[List[int]]) -> int:
6161
m, n = len(grid), len(grid[0])
62-
rows = [0] * m
63-
cols = [0] * n
62+
row = [0] * m
63+
col = [0] * n
6464
for i in range(m):
6565
for j in range(n):
66-
if grid[i][j] == 1:
67-
rows[i] += 1
68-
cols[j] += 1
69-
res = 0
70-
for i in range(m):
71-
for j in range(n):
72-
if grid[i][j] == 1:
73-
if rows[i] > 1 or cols[j] > 1:
74-
res += 1
75-
return res
66+
if grid[i][j]:
67+
row[i] += 1
68+
col[j] += 1
69+
return sum(
70+
grid[i][j] and (row[i] > 1 or col[j] > 1)
71+
for i in range(m)
72+
for j in range(n)
73+
)
7674
```
7775

7876
### **Java**
@@ -81,27 +79,25 @@ class Solution:
8179
class Solution {
8280
public int countServers(int[][] grid) {
8381
int m = grid.length, n = grid[0].length;
84-
int[] rows = new int[m];
85-
int[] cols = new int[n];
82+
int[] row = new int[m];
83+
int[] col = new int[n];
8684
for (int i = 0; i < m; ++i) {
8785
for (int j = 0; j < n; ++j) {
8886
if (grid[i][j] == 1) {
89-
++rows[i];
90-
++cols[j];
87+
row[i]++;
88+
col[j]++;
9189
}
9290
}
9391
}
94-
int res = 0;
92+
int ans = 0;
9593
for (int i = 0; i < m; ++i) {
9694
for (int j = 0; j < n; ++j) {
97-
if (grid[i][j] == 1) {
98-
if (rows[i] > 1 || cols[j] > 1) {
99-
++res;
100-
}
95+
if (grid[i][j] == 1 && (row[i] > 1 || col[j] > 1)) {
96+
++ans;
10197
}
10298
}
10399
}
104-
return res;
100+
return ans;
105101
}
106102
}
107103
```
@@ -113,57 +109,76 @@ class Solution {
113109
public:
114110
int countServers(vector<vector<int>>& grid) {
115111
int m = grid.size(), n = grid[0].size();
116-
vector<int> rows(m);
117-
vector<int> cols(n);
112+
vector<int> row(m), col(n);
118113
for (int i = 0; i < m; ++i) {
119114
for (int j = 0; j < n; ++j) {
120-
if (grid[i][j] == 1) {
121-
++rows[i];
122-
++cols[j];
115+
if (grid[i][j]) {
116+
++row[i];
117+
++col[j];
123118
}
124119
}
125120
}
126-
int res = 0;
121+
int ans = 0;
127122
for (int i = 0; i < m; ++i) {
128123
for (int j = 0; j < n; ++j) {
129-
if (grid[i][j] == 1) {
130-
if (rows[i] > 1 || cols[j] > 1) {
131-
++res;
132-
}
133-
}
124+
ans += grid[i][j] && (row[i] > 1 || col[j] > 1);
134125
}
135126
}
136-
return res;
127+
return ans;
137128
}
138129
};
139130
```
140131
141132
### **Go**
142133
143134
```go
144-
func countServers(grid [][]int) int {
135+
func countServers(grid [][]int) (ans int) {
145136
m, n := len(grid), len(grid[0])
146-
rows := make([]int, m)
147-
cols := make([]int, n)
148-
for i := 0; i < m; i++ {
149-
for j := 0; j < n; j++ {
150-
if grid[i][j] == 1 {
151-
rows[i]++
152-
cols[j]++
137+
row, col := make([]int, m), make([]int, n)
138+
for i := range grid {
139+
for j, x := range grid[i] {
140+
if x == 1 {
141+
row[i]++
142+
col[j]++
153143
}
154144
}
155145
}
156-
res := 0
157-
for i := 0; i < m; i++ {
158-
for j := 0; j < n; j++ {
159-
if grid[i][j] == 1 {
160-
if rows[i] > 1 || cols[j] > 1 {
161-
res++
162-
}
146+
for i := range grid {
147+
for j, x := range grid[i] {
148+
if x == 1 && (row[i] > 1 || col[j] > 1) {
149+
ans++
163150
}
164151
}
165152
}
166-
return res
153+
return
154+
}
155+
```
156+
157+
### **TypeScript**
158+
159+
```ts
160+
function countServers(grid: number[][]): number {
161+
const m = grid.length;
162+
const n = grid[0].length;
163+
const row = new Array(m).fill(0);
164+
const col = new Array(n).fill(0);
165+
for (let i = 0; i < m; i++) {
166+
for (let j = 0; j < n; j++) {
167+
if (grid[i][j] === 1) {
168+
row[i]++;
169+
col[j]++;
170+
}
171+
}
172+
}
173+
let ans = 0;
174+
for (let i = 0; i < m; i++) {
175+
for (let j = 0; j < n; j++) {
176+
if (grid[i][j] === 1 && (row[i] > 1 || col[j] > 1)) {
177+
ans++;
178+
}
179+
}
180+
}
181+
return ans;
167182
}
168183
```
169184

solution/1200-1299/1267.Count Servers that Communicate/Solution.cpp

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,21 @@ class Solution {
22
public:
33
int countServers(vector<vector<int>>& grid) {
44
int m = grid.size(), n = grid[0].size();
5-
vector<int> rows(m);
6-
vector<int> cols(n);
5+
vector<int> row(m), col(n);
76
for (int i = 0; i < m; ++i) {
87
for (int j = 0; j < n; ++j) {
9-
if (grid[i][j] == 1) {
10-
++rows[i];
11-
++cols[j];
8+
if (grid[i][j]) {
9+
++row[i];
10+
++col[j];
1211
}
1312
}
1413
}
15-
int res = 0;
14+
int ans = 0;
1615
for (int i = 0; i < m; ++i) {
1716
for (int j = 0; j < n; ++j) {
18-
if (grid[i][j] == 1) {
19-
if (rows[i] > 1 || cols[j] > 1) {
20-
++res;
21-
}
22-
}
17+
ans += grid[i][j] && (row[i] > 1 || col[j] > 1);
2318
}
2419
}
25-
return res;
20+
return ans;
2621
}
2722
};

0 commit comments

Comments
 (0)