力扣——算法入门计划第七天

简介: 力扣(LeetCode)是领扣网络旗下专注于程序员技术成长和企业技术人才服务的品牌。源自美国硅谷,力扣为全球程序员提供了专业的IT技术职业化提升平台,有效帮助程序员实现快速进步和长期成长。 此外,力扣(LeetCode)致力于解决程序员技术评估、培训、职业匹配的痛点,逐步引领互联网技术求职和招聘迈向专业化。

 目录

🍕题目

🍔方法一:BFS就是广度优先搜索

🍟BFS代码

🍔方法二:DFS

🍟代码

🍕题目

🍔思路:

🍟代码


🍕题目

733. 图像渲染

image.png

🍔方法一:BFS就是广度优先搜索

BFS就是广度优先搜索

先要记录初始节点的颜色值(找个变量存储起来)

1)我们从给定的起点开始,给它染色,进行广度优先搜索。这个初始节点当作第一层。
找到初始节点周围四个节点,给它们染色(符合条件的才能染),

2)这四个节点当作第二层。
再找到这四个节点周围八个节点,给它们染色(符合条件的才能染),

3)这八个节点当作第三层。
重复以往,层层递进,直到找不到符合要求的节点。

4)每次搜索到一个方格时,如果其与初始位置的方格颜色相同,就将该方格加入队列,并将该方格的颜色更新,以防止重复入队。

🍟BFS代码

class Solution:
    def floodFill(self, image: List[List[int]], sr: int, sc: int, newColor: int) -> List[List[int]]:
        currcolor = image[sr][sc]
        if currcolor == newColor:
            return image
        n,m = len(image),len(image[0])
        que = collections.deque([(sr,sc)])
        image[sr][sc] = newColor
        while que:
            x,y = que.popleft()
            for mx,my in [(x-1,y),(x+1,y),(x,y-1),(x,y+1)]:
                if 0 <= mx < n and 0 <= my < m and image[mx][my] == currcolor:
                    que.append((mx,my)) 
                    image[mx][my] = newColor
        return image

image.gif

image.png

🍔方法二:DFS

DFS,即 深度优先搜索

1)先定个四个方向的顺序,例如上下左右,先上后下后左最后右
2)首先找到初始节点,给它染色。
3)按照方向的顺序,这里是上,就先把这个点的上方点先染色。
4)一直往上一直往上,直到不符合要求,便退一步,再找这个点的下方向
重复这个步骤。(这步是和BFS主要差别)

🍟代码

class Solution:
    def floodFill(self, image: List[List[int]], sr: int, sc: int, newColor: int) -> List[List[int]]:
        n, m = len(image), len(image[0])
        currColor = image[sr][sc]
        def dfs(x: int, y: int):
            if image[x][y] == currColor:
                image[x][y] = newColor
                for mx, my in [(x - 1, y), (x + 1, y), (x, y - 1), (x, y + 1)]:
                    if 0 <= mx < n and 0 <= my < m and image[mx][my] == currColor:
                        dfs(mx, my)
        if currColor != newColor:
            dfs(sr, sc)
        return image

image.gif

image.png

🍕题目

695. 岛屿的最大面积

image.png

🍔思路:

1)题目其实想让我们求网格中每个连通形状的面积,然后取最大值。(1表示岛屿)

2)如果我们在一个土地上,以 4个方向查找与之相连的每一个土地(以及与这些土地相连的土地image.gifimage.png

那么探索过的土地总数将是该连通形状的面积。如同等于5 * 1 = 5

3)同时为了确保每个土地访问不超过一次,我们每次经过一块土地时,将这块土地的值置为 0。这样我们就不会多次访问同一土地。

🍟代码

先定义dfs深度优先搜索函数,在定义一个求最大岛屿面积函数

具体见代码

class Solution:
    def dfs(self, grid, cur_i, cur_j) -> int:
        if cur_i < 0 or cur_j < 0 or cur_i == len(grid) or cur_j == len(grid[0]) or grid[cur_i][cur_j] != 1:
            return 0
        else:grid[cur_i][cur_j] = 0   #如果不是0,而且没越界就是岛屿的土地
        ans = 1
        for di, dj in [[0, 1], [0, -1], [1, 0], [-1, 0]]: #不断探寻
            next_i, next_j = cur_i + di, cur_j + dj
            ans += self.dfs(grid, next_i, next_j)
        return ans
    def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
        ans = 0
        for i, l in enumerate(grid):
            for j, n in enumerate(l):
                ans = max(self.dfs(grid, i, j), ans) #调用定义的dfs函数
        return ans

image.gif

image.png


相关文章
|
2天前
|
算法 程序员
高阶算法班从入门到精通之路
高阶算法班从入门到精通之路
11 3
|
3天前
|
存储 算法 搜索推荐
力扣每日一题 6/13 反悔贪心算法
力扣每日一题 6/13 反悔贪心算法
7 1
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
机器学习算法入门:从K-means到神经网络
【6月更文挑战第26天】机器学习入门:从K-means到神经网络。文章涵盖了K-means聚类、逻辑回归、决策树和神经网络的基础原理及应用场景。K-means用于数据分组,逻辑回归适用于二分类,决策树通过特征划分做决策,神经网络则在复杂任务如图像和语言处理中大显身手。是初学者的算法导览。
|
8天前
|
自然语言处理 算法
ransformers从入门到精通:常用的subword tokenizer算法
- WordPiece、BPE/BBPE最小字词进行合并最终字词,BPE/BBPE直接采用词频判断合并规则而WordPiece采用最大似然的方式 - unigram采用从最大的字词集合里移除那些对语料库整体概率贡献最小的子词【6月更文挑战第7天】
19 3
|
7天前
|
存储 自然语言处理 算法
位运算入门及简单算法题的应用
位运算入门及简单算法题的应用
12 1
|
14天前
|
算法 Java
[Java·算法·简单] LeetCode 283. 移动零
[Java·算法·简单] LeetCode 283. 移动零
17 2
|
14天前
|
算法 Java
[Java·算法·中等] LeetCode21. 合并两个有序链表
[Java·算法·中等] LeetCode21. 合并两个有序链表
15 2
|
16天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
16天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
3天前
|
机器学习/深度学习 算法
算法入门基础
算法入门基础