Skip to content

Commit e726b2e

Browse files
committed
feat: add solutions to lc problems: No.0200,1619
No.0200.Number of Islands No.1619.Mean of Array After Removing Some Elements
1 parent e73a97e commit e726b2e

File tree

9 files changed

+234
-72
lines changed

9 files changed

+234
-72
lines changed

solution/0200-0299/0200.Number of Islands/README.md

Lines changed: 54 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,28 @@ BFS、DFS、并查集均可。
6161

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

64+
DFS:
65+
66+
```python
67+
class Solution:
68+
def numIslands(self, grid: List[List[str]]) -> int:
69+
def dfs(i, j):
70+
if i < 0 or i >= len(grid) or j < 0 or j >= len(grid[0]) or grid[i][j] != '1':
71+
return
72+
grid[i][j] = '0'
73+
for x, y in [[0, -1], [0, 1], [1, 0], [-1, 0]]:
74+
dfs(i + x, j + y)
75+
76+
ans = 0
77+
m, n = len(grid), len(grid[0])
78+
for i in range(m):
79+
for j in range(n):
80+
if grid[i][j] == '1':
81+
dfs(i, j)
82+
ans += 1
83+
return ans
84+
```
85+
6486
并查集:
6587

6688
```python
@@ -98,30 +120,29 @@ DFS:
98120

99121
```java
100122
class Solution {
123+
private int[][] dirs = new int[][]{{0, -1}, {0, 1}, {1, 0}, {-1, 0}};
124+
101125
public int numIslands(char[][] grid) {
102-
int islandNum = 0;
126+
int ans = 0;
103127
for (int i = 0; i < grid.length; i++) {
104128
for (int j = 0; j < grid[0].length; j++) {
105129
if (grid[i][j] == '1') {
106-
infect(grid, i, j);
107-
islandNum ++;
130+
dfs(grid, i, j);
131+
++ans;
108132
}
109133
}
110134
}
111-
return islandNum;
135+
return ans;
112136
}
113137

114-
public void infect(char[][] grid, int i, int j) {
115-
if (i < 0 || i >= grid.length ||
116-
j < 0 || j >= grid[0].length ||
117-
grid[i][j] != '1') {
138+
public void dfs(char[][] grid, int i, int j) {
139+
if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] != '1') {
118140
return;
119141
}
120-
grid[i][j] = '2';
121-
infect(grid, i + 1, j);
122-
infect(grid, i - 1, j);
123-
infect(grid, i, j + 1);
124-
infect(grid, i, j - 1);
142+
grid[i][j] = '0';
143+
for (int[] dir : dirs) {
144+
dfs(grid, i + dir[0], j + dir[1]);
145+
}
125146
}
126147
}
127148
```
@@ -174,37 +195,29 @@ class Solution {
174195

175196
```ts
176197
function numIslands(grid: string[][]): number {
177-
let m = grid.length,
178-
n = grid[0].length;
179-
let ans = 0;
180-
for (let i = 0; i < m; ++i) {
181-
for (let j = 0; j < n; ++j) {
182-
if (grid[i][j] == "1") {
183-
dfs(grid, i, j);
184-
++ans;
185-
}
198+
let m = grid.length, n = grid[0].length;
199+
let ans = 0;
200+
for (let i = 0; i < m; ++i) {
201+
for (let j = 0; j < n; ++j) {
202+
if (grid[i][j] == '1') {
203+
dfs(grid, i, j);
204+
++ans;
205+
}
206+
}
186207
}
187-
}
188-
return ans;
189-
}
208+
return ans;
209+
};
190210

191211
function dfs(grid: string[][], i: number, j: number) {
192-
let m = grid.length,
193-
n = grid[0].length;
194-
if (i < 0 || i > m - 1 || j < 0 || j > n - 1 || grid[i][j] == "0") {
195-
return;
196-
}
197-
grid[i][j] = "0";
198-
for (let [dx, dy] of [
199-
[0, 1],
200-
[0, -1],
201-
[1, 0],
202-
[-1, 0],
203-
]) {
204-
let x = i + dx,
205-
y = j + dy;
206-
dfs(grid, x, y);
207-
}
212+
let m = grid.length, n = grid[0].length;
213+
if (i < 0 || i > m - 1 || j < 0 || j > n - 1 || grid[i][j] == '0') {
214+
return;
215+
}
216+
grid[i][j] = '0';
217+
for (let [dx, dy] of [[0, 1], [0, -1], [1, 0], [-1, 0]]) {
218+
let x = i + dx, y = j + dy;
219+
dfs(grid, x, y);
220+
}
208221
}
209222
```
210223

solution/0200-0299/0200.Number of Islands/README_EN.md

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,34 @@
4141
<li><code>grid[i][j]</code> is <code>&#39;0&#39;</code> or <code>&#39;1&#39;</code>.</li>
4242
</ul>
4343

44-
4544
## Solutions
4645

4746
<!-- tabs:start -->
4847

4948
### **Python3**
5049

50+
DFS:
51+
52+
```python
53+
class Solution:
54+
def numIslands(self, grid: List[List[str]]) -> int:
55+
def dfs(i, j):
56+
if i < 0 or i >= len(grid) or j < 0 or j >= len(grid[0]) or grid[i][j] != '1':
57+
return
58+
grid[i][j] = '0'
59+
for x, y in [[0, -1], [0, 1], [1, 0], [-1, 0]]:
60+
dfs(i + x, j + y)
61+
62+
ans = 0
63+
m, n = len(grid), len(grid[0])
64+
for i in range(m):
65+
for j in range(n):
66+
if grid[i][j] == '1':
67+
dfs(i, j)
68+
ans += 1
69+
return ans
70+
```
71+
5172
Union Find:
5273

5374
```python
@@ -83,30 +104,29 @@ DFS:
83104

84105
```java
85106
class Solution {
107+
private int[][] dirs = new int[][]{{0, -1}, {0, 1}, {1, 0}, {-1, 0}};
108+
86109
public int numIslands(char[][] grid) {
87-
int islandNum = 0;
110+
int ans = 0;
88111
for (int i = 0; i < grid.length; i++) {
89112
for (int j = 0; j < grid[0].length; j++) {
90113
if (grid[i][j] == '1') {
91-
infect(grid, i, j);
92-
islandNum ++;
114+
dfs(grid, i, j);
115+
++ans;
93116
}
94117
}
95118
}
96-
return islandNum;
119+
return ans;
97120
}
98121

99-
public void infect(char[][] grid, int i, int j) {
100-
if (i < 0 || i >= grid.length ||
101-
j < 0 || j >= grid[0].length ||
102-
grid[i][j] != '1') {
122+
public void dfs(char[][] grid, int i, int j) {
123+
if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] != '1') {
103124
return;
104125
}
105-
grid[i][j] = '2';
106-
infect(grid, i + 1, j);
107-
infect(grid, i - 1, j);
108-
infect(grid, i, j + 1);
109-
infect(grid, i, j - 1);
126+
grid[i][j] = '0';
127+
for (int[] dir : dirs) {
128+
dfs(grid, i + dir[0], j + dir[1]);
129+
}
110130
}
111131
}
112132
```
Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,26 @@
11
class Solution {
2+
private int[][] dirs = new int[][]{{0, -1}, {0, 1}, {1, 0}, {-1, 0}};
3+
24
public int numIslands(char[][] grid) {
3-
int islandNum = 0;
5+
int ans = 0;
46
for (int i = 0; i < grid.length; i++) {
57
for (int j = 0; j < grid[0].length; j++) {
68
if (grid[i][j] == '1') {
7-
infect(grid, i, j);
8-
islandNum ++;
9+
dfs(grid, i, j);
10+
++ans;
911
}
1012
}
1113
}
12-
return islandNum;
14+
return ans;
1315
}
1416

15-
public void infect(char[][] grid, int i, int j) {
16-
if (i < 0 || i >= grid.length ||
17-
j < 0 || j >= grid[0].length ||
18-
grid[i][j] != '1') {
17+
public void dfs(char[][] grid, int i, int j) {
18+
if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] != '1') {
1919
return;
2020
}
21-
grid[i][j] = '2';
22-
infect(grid, i + 1, j);
23-
infect(grid, i - 1, j);
24-
infect(grid, i, j + 1);
25-
infect(grid, i, j - 1);
21+
grid[i][j] = '0';
22+
for (int[] dir : dirs) {
23+
dfs(grid, i + dir[0], j + dir[1]);
24+
}
2625
}
2726
}

solution/1600-1699/1619.Mean of Array After Removing Some Elements/README.md

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,15 +70,31 @@
7070
<!-- 这里可写当前语言的特殊实现逻辑 -->
7171

7272
```python
73-
73+
class Solution:
74+
def trimMean(self, arr: List[int]) -> float:
75+
n = len(arr)
76+
start, end = int(n * 0.05), int(n * 0.95)
77+
arr.sort()
78+
t = arr[start: end]
79+
return round(sum(t) / len(t), 5)
7480
```
7581

7682
### **Java**
7783

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

8086
```java
81-
87+
class Solution {
88+
public double trimMean(int[] arr) {
89+
Arrays.sort(arr);
90+
int n = arr.length;
91+
double s = 0;
92+
for (int start = (int) (n * 0.05), i = start; i < n - start; ++i) {
93+
s += arr[i];
94+
}
95+
return s / (n * 0.9);
96+
}
97+
}
8298
```
8399

84100
### **TypeScript**
@@ -95,6 +111,36 @@ function trimMean(arr: number[]): number {
95111
};
96112
```
97113

114+
### **C++**
115+
116+
```cpp
117+
class Solution {
118+
public:
119+
double trimMean(vector<int>& arr) {
120+
sort(arr.begin(), arr.end());
121+
int n = arr.size();
122+
double s = 0;
123+
for (int start = (int) (n * 0.05), i = start; i < n - start; ++i)
124+
s += arr[i];
125+
return s / (n * 0.9);
126+
}
127+
};
128+
```
129+
130+
### **Go**
131+
132+
```go
133+
func trimMean(arr []int) float64 {
134+
sort.Ints(arr)
135+
n := len(arr)
136+
sum := 0.0
137+
for i := n / 20; i < n-n/20; i++ {
138+
sum += float64(arr[i])
139+
}
140+
return sum / (float64(n) * 0.9)
141+
}
142+
```
143+
98144
### **...**
99145

100146
```

solution/1600-1699/1619.Mean of Array After Removing Some Elements/README_EN.md

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,29 @@
6262
### **Python3**
6363

6464
```python
65-
65+
class Solution:
66+
def trimMean(self, arr: List[int]) -> float:
67+
n = len(arr)
68+
start, end = int(n * 0.05), int(n * 0.95)
69+
arr.sort()
70+
t = arr[start: end]
71+
return round(sum(t) / len(t), 5)
6672
```
6773

6874
### **Java**
6975

7076
```java
71-
77+
class Solution {
78+
public double trimMean(int[] arr) {
79+
Arrays.sort(arr);
80+
int n = arr.length;
81+
double s = 0;
82+
for (int start = (int) (n * 0.05), i = start; i < n - start; ++i) {
83+
s += arr[i];
84+
}
85+
return s / (n * 0.9);
86+
}
87+
}
7288
```
7389

7490
### **TypeScript**
@@ -85,6 +101,36 @@ function trimMean(arr: number[]): number {
85101
};
86102
```
87103

104+
### **C++**
105+
106+
```cpp
107+
class Solution {
108+
public:
109+
double trimMean(vector<int>& arr) {
110+
sort(arr.begin(), arr.end());
111+
int n = arr.size();
112+
double s = 0;
113+
for (int start = (int) (n * 0.05), i = start; i < n - start; ++i)
114+
s += arr[i];
115+
return s / (n * 0.9);
116+
}
117+
};
118+
```
119+
120+
### **Go**
121+
122+
```go
123+
func trimMean(arr []int) float64 {
124+
sort.Ints(arr)
125+
n := len(arr)
126+
sum := 0.0
127+
for i := n / 20; i < n-n/20; i++ {
128+
sum += float64(arr[i])
129+
}
130+
return sum / (float64(n) * 0.9)
131+
}
132+
```
133+
88134
### **...**
89135

90136
```

0 commit comments

Comments
 (0)