Skip to content

Commit 85ad0ff

Browse files
Merge branch 'youngyangyang04:master' into master
2 parents 9eb819e + 7c8c316 commit 85ad0ff

File tree

3 files changed

+318
-0
lines changed

3 files changed

+318
-0
lines changed

problems/0309.最佳买卖股票时机含冷冻期.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,26 @@ func max(a, b int) int {
359359

360360
### Javascript:
361361

362+
> 不同的状态定义 感觉更容易理解些
363+
```javascript
364+
function maxProfit(prices) {
365+
// 第i天状态 持股 卖出 非冷冻期(不持股) 处于冷冻期
366+
const dp = new Array(prices.length).fill(0).map(() => [0, 0, 0, 0]);
367+
dp[0][0] = -prices[0];
368+
for (let i = 1; i < prices.length; i++) {
369+
// 持股
370+
dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][2] - prices[i]);
371+
// 卖出
372+
dp[i][1] = dp[i - 1][0] + prices[i];
373+
// 非冷冻期(不持股)
374+
dp[i][2] = Math.max(dp[i - 1][2], dp[i - 1][1]);
375+
// 冷冻期(上一天卖出)
376+
dp[i][3] = dp[i - 1][1];
377+
}
378+
return Math.max(...dp.pop());
379+
};
380+
```
381+
362382
```javascript
363383
const maxProfit = (prices) => {
364384
if(prices.length < 2) {

problems/kamacoder/0099.岛屿的数量广搜.md

Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,10 +190,164 @@ int main() {
190190

191191
### Java
192192

193+
```java
194+
195+
import java.util.Scanner;
196+
197+
public class Main {
198+
static int[][] dir = { {0, 1}, {1, 0}, {-1, 0}, {0, -1} }; // 四个方向
199+
200+
public static void dfs(int[][] grid, boolean[][] visited, int x, int y) {
201+
for (int i = 0; i < 4; i++) {
202+
int nextx = x + dir[i][0];
203+
int nexty = y + dir[i][1];
204+
if (nextx < 0 || nextx >= grid.length || nexty < 0 || nexty >= grid[0].length) continue; // 越界了,直接跳过
205+
if (!visited[nextx][nexty] && grid[nextx][nexty] == 1) { // 没有访问过的 同时 是陆地的
206+
visited[nextx][nexty] = true;
207+
dfs(grid, visited, nextx, nexty);
208+
}
209+
}
210+
}
211+
212+
public static void main(String[] args) {
213+
Scanner scanner = new Scanner(System.in);
214+
int n = scanner.nextInt();
215+
int m = scanner.nextInt();
216+
int[][] grid = new int[n][m];
217+
for (int i = 0; i < n; i++) {
218+
for (int j = 0; j < m; j++) {
219+
grid[i][j] = scanner.nextInt();
220+
}
221+
}
222+
223+
boolean[][] visited = new boolean[n][m];
224+
225+
int result = 0;
226+
for (int i = 0; i < n; i++) {
227+
for (int j = 0; j < m; j++) {
228+
if (!visited[i][j] && grid[i][j] == 1) {
229+
visited[i][j] = true;
230+
result++; // 遇到没访问过的陆地,+1
231+
dfs(grid, visited, i, j); // 将与其链接的陆地都标记上 true
232+
}
233+
}
234+
}
235+
236+
System.out.println(result);
237+
}
238+
}
239+
240+
241+
242+
```
243+
244+
193245
### Python
194246

247+
```python
248+
249+
def dfs(grid, visited, x, y):
250+
dir = [(0, 1), (1, 0), (-1, 0), (0, -1)] # 四个方向
251+
for d in dir:
252+
nextx, nexty = x + d[0], y + d[1]
253+
if 0 <= nextx < len(grid) and 0 <= nexty < len(grid[0]):
254+
if not visited[nextx][nexty] and grid[nextx][nexty] == 1: # 没有访问过的 同时 是陆地的
255+
visited[nextx][nexty] = True
256+
dfs(grid, visited, nextx, nexty)
257+
258+
def main():
259+
n, m = map(int, input().split())
260+
grid = [list(map(int, input().split())) for _ in range(n)]
261+
visited = [[False] * m for _ in range(n)]
262+
263+
result = 0
264+
for i in range(n):
265+
for j in range(m):
266+
if not visited[i][j] and grid[i][j] == 1:
267+
visited[i][j] = True
268+
result += 1 # 遇到没访问过的陆地,+1
269+
dfs(grid, visited, i, j) # 将与其链接的陆地都标记上 True
270+
271+
print(result)
272+
273+
if __name__ == "__main__":
274+
main()
275+
276+
277+
278+
```
279+
280+
195281
### Go
196282

283+
```go
284+
285+
package main
286+
287+
import (
288+
"bufio"
289+
"fmt"
290+
"os"
291+
"strconv"
292+
"strings"
293+
)
294+
295+
var dir = [4][2]int{{0, 1}, {1, 0}, {-1, 0}, {0, -1}} // 四个方向
296+
297+
func dfs(grid [][]int, visited [][]bool, x, y int) {
298+
for i := 0; i < 4; i++ {
299+
nextx := x + dir[i][0]
300+
nexty := y + dir[i][1]
301+
if nextx < 0 || nextx >= len(grid) || nexty < 0 || nexty >= len(grid[0]) {
302+
continue // 越界了,直接跳过
303+
}
304+
if !visited[nextx][nexty] && grid[nextx][nexty] == 1 { // 没有访问过的 同时 是陆地的
305+
visited[nextx][nexty] = true
306+
dfs(grid, visited, nextx, nexty)
307+
}
308+
}
309+
}
310+
311+
func main() {
312+
reader := bufio.NewReader(os.Stdin)
313+
var n, m int
314+
fmt.Scanf("%d %d", &n, &m)
315+
316+
grid := make([][]int, n)
317+
for i := 0; i < n; i++ {
318+
grid[i] = make([]int, m)
319+
line, _ := reader.ReadString('\n')
320+
line = strings.TrimSpace(line)
321+
elements := strings.Split(line, " ")
322+
for j := 0; j < m; j++ {
323+
grid[i][j], _ = strconv.Atoi(elements[j])
324+
}
325+
}
326+
327+
visited := make([][]bool, n)
328+
for i := 0; i < n; i++ {
329+
visited[i] = make([]bool, m)
330+
}
331+
332+
result := 0
333+
for i := 0; i < n; i++ {
334+
for j := 0; j < m; j++ {
335+
if !visited[i][j] && grid[i][j] == 1 {
336+
visited[i][j] = true
337+
result++ // 遇到没访问过的陆地,+1
338+
dfs(grid, visited, i, j) // 将与其链接的陆地都标记上 true
339+
}
340+
}
341+
}
342+
343+
fmt.Println(result)
344+
}
345+
346+
347+
```
348+
349+
350+
197351
### Rust
198352

199353
### Javascript
@@ -283,12 +437,62 @@ const bfs = (graph, visited, x, y) => {
283437

284438
### PhP
285439

440+
```PHP
441+
442+
<?php
443+
444+
function dfs($grid, &$visited, $x, $y) {
445+
$dir = [[0, 1], [1, 0], [-1, 0], [0, -1]]; // 四个方向
446+
foreach ($dir as $d) {
447+
$nextx = $x + $d[0];
448+
$nexty = $y + $d[1];
449+
if ($nextx < 0 || $nextx >= count($grid) || $nexty < 0 || $nexty >= count($grid[0])) {
450+
continue; // 越界了,直接跳过
451+
}
452+
if (!$visited[$nextx][$nexty] && $grid[$nextx][$nexty] == 1) { // 没有访问过的 同时 是陆地的
453+
$visited[$nextx][$nexty] = true;
454+
dfs($grid, $visited, $nextx, $nexty);
455+
}
456+
}
457+
}
458+
459+
function main() {
460+
fscanf(STDIN, "%d %d", $n, $m);
461+
$grid = [];
462+
for ($i = 0; $i < $n; $i++) {
463+
$grid[$i] = array_map('intval', explode(' ', trim(fgets(STDIN))));
464+
}
465+
466+
$visited = array_fill(0, $n, array_fill(0, $m, false));
467+
468+
$result = 0;
469+
for ($i = 0; $i < $n; $i++) {
470+
for ($j = 0; $j < $m; $j++) {
471+
if (!$visited[$i][$j] && $grid[$i][$j] == 1) {
472+
$visited[$i][$j] = true;
473+
$result++; // 遇到没访问过的陆地,+1
474+
dfs($grid, $visited, $i, $j); // 将与其链接的陆地都标记上 true
475+
}
476+
}
477+
}
478+
479+
echo $result . PHP_EOL;
480+
}
481+
482+
main();
483+
?>
484+
485+
486+
```
487+
488+
286489
### Swift
287490

288491
### Scala
289492

290493
### C#
291494

495+
292496
### Dart
293497

294498
### C

problems/kamacoder/0100.岛屿的最大面积.md

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,100 @@ public:
226226
227227
### Python
228228
229+
DFS
230+
231+
```python
232+
# 四个方向
233+
position = [[0, 1], [1, 0], [0, -1], [-1, 0]]
234+
count = 0
235+
236+
237+
def dfs(grid, visited, x, y):
238+
"""
239+
深度优先搜索,对一整块陆地进行标记
240+
"""
241+
global count # 定义全局变量,便于传递count值
242+
for i, j in position:
243+
cur_x = x + i
244+
cur_y = y + j
245+
# 下标越界,跳过
246+
if cur_x < 0 or cur_x >= len(grid) or cur_y < 0 or cur_y >= len(grid[0]):
247+
continue
248+
if not visited[cur_x][cur_y] and grid[cur_x][cur_y] == 1:
249+
visited[cur_x][cur_y] = True
250+
count += 1
251+
dfs(grid, visited, cur_x, cur_y)
252+
253+
254+
n, m = map(int, input().split())
255+
# 邻接矩阵
256+
grid = []
257+
for i in range(n):
258+
grid.append(list(map(int, input().split())))
259+
# 访问表
260+
visited = [[False] * m for _ in range(n)]
261+
262+
result = 0 # 记录最终结果
263+
for i in range(n):
264+
for j in range(m):
265+
if grid[i][j] == 1 and not visited[i][j]:
266+
count = 1
267+
visited[i][j] = True
268+
dfs(grid, visited, i, j)
269+
result = max(count, result)
270+
271+
print(result)
272+
```
273+
274+
BFS
275+
276+
```python
277+
from collections import deque
278+
279+
position = [[0, 1], [1, 0], [0, -1], [-1, 0]] # 四个方向
280+
count = 0
281+
282+
283+
def bfs(grid, visited, x, y):
284+
"""
285+
广度优先搜索对陆地进行标记
286+
"""
287+
global count # 声明全局变量
288+
que = deque()
289+
que.append([x, y])
290+
while que:
291+
cur_x, cur_y = que.popleft()
292+
for i, j in position:
293+
next_x = cur_x + i
294+
next_y = cur_y + j
295+
# 下标越界,跳过
296+
if next_x < 0 or next_x >= len(grid) or next_y < 0 or next_y >= len(grid[0]):
297+
continue
298+
if grid[next_x][next_y] == 1 and not visited[next_x][next_y]:
299+
visited[next_x][next_y] = True
300+
count += 1
301+
que.append([next_x, next_y])
302+
303+
304+
n, m = map(int, input().split())
305+
# 邻接矩阵
306+
grid = []
307+
for i in range(n):
308+
grid.append(list(map(int, input().split())))
309+
visited = [[False] * m for _ in range(n)] # 访问表
310+
311+
result = 0 # 记录最终结果
312+
for i in range(n):
313+
for j in range(m):
314+
if grid[i][j] == 1 and not visited[i][j]:
315+
count = 1
316+
visited[i][j] = True
317+
bfs(grid, visited, i, j)
318+
res = max(result, count)
319+
320+
print(result)
321+
```
322+
229323
### Go
230324

231325
### Rust

0 commit comments

Comments
 (0)