Contents

ARST打卡第196周[196/521]

Algorithm

lc1210_穿过迷宫的最少移动次数

思路就是模拟bfs,然后用vis一个集合维护已经到达过的地方,主要是比一般的bfs难在状态维护上,自己写应该用cpp写容易点,但是go也能写,可能会写成很多变量维护一个状态,看看答案go怎么写,学习一下.

答案还有dp的方式,很细致,也可以看看,当然比常规的bfs难理解一点点

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
func minimumMoves(grid [][]int) int {
    n := len(grid)
    dist := make([][][2]int, n)
    for i := range dist {
        dist[i] = make([][2]int, n)
        for j := range dist[i] {
            dist[i][j] = [2]int{-1, -1}
        }
    }
    dist[0][0][0] = 0
    queue := [][3]int{{0, 0, 0}}

    for len(queue) > 0 {
        arr := queue[0]
        queue = queue[1:]
        x := arr[0]
        y := arr[1]
        status := arr[2]
        if status == 0 {
            // 向右移动一个单元格
            if y+2 < n && dist[x][y+1][0] == -1 && grid[x][y+2] == 0 {
                dist[x][y+1][0] = dist[x][y][0] + 1
                queue = append(queue, [3]int{x, y + 1, 0})
            }
            // 向下移动一个单元格
            if x+1 < n && dist[x+1][y][0] == -1 && grid[x+1][y] == 0 && grid[x+1][y+1] == 0 {
                dist[x+1][y][0] = dist[x][y][0] + 1
                queue = append(queue, [3]int{x + 1, y, 0})
            }
            // 顺时针旋转 90 度
            if x+1 < n && y+1 < n && dist[x][y][1] == -1 && grid[x+1][y] == 0 && grid[x+1][y+1] == 0 {
                dist[x][y][1] = dist[x][y][0] + 1
                queue = append(queue, [3]int{x, y, 1})
            }
        } else {
            // 向右移动一个单元格
            if y+1 < n && dist[x][y+1][1] == -1 && grid[x][y+1] == 0 && grid[x+1][y+1] == 0 {
                dist[x][y+1][1] = dist[x][y][1] + 1
                queue = append(queue, [3]int{x, y + 1, 1})
            }
            // 向下移动一个单元格
            if x+2 < n && dist[x+1][y][1] == -1 && grid[x+2][y] == 0 {
                dist[x+1][y][1] = dist[x][y][1] + 1
                queue = append(queue, [3]int{x + 1, y, 1})
            }
            // 逆时针旋转 90 度
            if x+1 < n && y+1 < n && dist[x][y][0] == -1 && grid[x][y+1] == 0 && grid[x+1][y+1] == 0 {
                dist[x][y][0] = dist[x][y][1] + 1
                queue = append(queue, [3]int{x, y, 0})
            }
        }
    }

    return dist[n-1][n-2][0]
}

Review

【TED演讲】运气在你的生活中扮演什么角色?

大学或者公司发offer时,如果发现达标的学生太多,然后不断得提升发offer的标准,将会造成社会上的人们和学生们巨大的焦虑和内卷。

只有通过让所有的达标的人通过随机抽取的方式,才能达到一种相对的公平,并且减少大家的内卷和焦虑。

教授也举了很多例子说明人生中很多的事情其实都和运气相关。

所以力所能及得去尊重并关爱那些同样努力工作却暂时还没有好运得到成功的人。

那些还没有好运的人,也不要太焦虑,继续做好自己能做的,然后等待花开或者寻找符合自己能力的新的风向。

Tips

云服务器那些好玩有趣的项目

Share-真正爱你的人是温柔的软肋

过完年从家里离别去远方,一定要记得带许多卫生纸,2.4立春离家忘了带,把身上带的口罩全用光了,去年各种苦难下坚韧着没有流下的眼泪,在离家上了去高铁站的汽车后狂飙不止…不过这些都是幸福,有牵挂我爱我的人让我把悲伤的泪融进离别的泪珠里…

2023…继续做好自己,加油