国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

LeetCode-200. 島嶼數(shù)量【深度優(yōu)先搜索 廣度優(yōu)先搜索 并查集 數(shù)組 矩陣】

這篇具有很好參考價值的文章主要介紹了LeetCode-200. 島嶼數(shù)量【深度優(yōu)先搜索 廣度優(yōu)先搜索 并查集 數(shù)組 矩陣】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

題目描述:

給你一個由 ‘1’(陸地)和 ‘0’(水)組成的的二維網(wǎng)格,請你計算網(wǎng)格中島嶼的數(shù)量。

島嶼總是被水包圍,并且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連接形成。

此外,你可以假設(shè)該網(wǎng)格的四條邊均被水包圍。

示例 1:

輸入:grid = [
[“1”,“1”,“1”,“1”,“0”],
[“1”,“1”,“0”,“1”,“0”],
[“1”,“1”,“0”,“0”,“0”],
[“0”,“0”,“0”,“0”,“0”]
]
輸出:1
示例 2:

輸入:grid = [
[“1”,“1”,“0”,“0”,“0”],
[“1”,“1”,“0”,“0”,“0”],
[“0”,“0”,“1”,“0”,“0”],
[“0”,“0”,“0”,“1”,“1”]
]
輸出:3

提示:

m == grid.length
n == grid[i].length
1 <= m, n <= 300
grid[i][j] 的值為 ‘0’ 或 ‘1’

解題思路一:bfs,主要思想都是遇到一個沒有visited過的"陸地"先result += 1,然后用深搜或者廣搜將這片"陸地"全部做上visited標(biāo)記。

class Solution:
    def __init__(self):
        self.dirs = [(-1,0), (0, 1), (1, 0), (0, -1)] # 左上右下
    def numIslands(self, grid: List[List[str]]) -> int:
        m, n = len(grid), len(grid[0])
        visited = [[False] * n for _ in range(m)]
        result = 0
        for i in range(m):
            for j in range(n):
                if not visited[i][j] and grid[i][j] == '1':
                    result += 1
                    self.bfs(grid, i, j, visited)
        return result

    def bfs(self, grid, x, y, visited):
        q = deque()
        q.append((x, y))
        visited[x][y] = True
        while q:
            x, y = q.popleft()
            for d in self.dirs:
                nextx = x + d[0]
                nexty = y + d[1]
                if nextx < 0 or nextx >= len(grid) or nexty < 0 or nexty >= len(grid[0]):
                    continue
                if not visited[nextx][nexty] and grid[nextx][nexty] == '1':
                    q.append((nextx, nexty))
                    visited[nextx][nexty] = True

時間復(fù)雜度:O(nm)
空間復(fù)雜度:O(nm)

解題思路二:dfs

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        m, n = len(grid), len(grid[0])
        visited = [[False] * n for _ in range(m)]
        dirs = [(-1,0), (0, 1), (1, 0), (0, -1)] # 左上右下
        result = 0
        def dfs(x, y):
            for d in dirs:
                nextx = x + d[0]
                nexty = y + d[1]
                if nextx < 0 or nextx >= m or nexty < 0 or nexty >= n:
                    continue
                if not visited[nextx][nexty] and grid[nextx][nexty] == '1':
                    visited[nextx][nexty] = True
                    dfs(nextx, nexty)

        for i in range(m):
            for j in range(n):
                if not visited[i][j] and grid[i][j] == '1':
                    visited[i][j] = True
                    result += 1
                    dfs(i, j)
        return result

時間復(fù)雜度:O(nm)
空間復(fù)雜度:O(nm)

解題思路三:并查集

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        f = {}

        def find(x):
            f.setdefault(x, x)
            if f[x] != x:
                f[x] = find(f[x])
            return f[x]

        def union(x, y):
            f[find(x)] = find(y)

        if not grid: return 0
        row = len(grid)
        col = len(grid[0])

        for i in range(row):
            for j in range(col):
                if grid[i][j] == "1":
                    for x, y in [[-1, 0], [0, -1]]:
                        tmp_i = i + x
                        tmp_j = j + y
                        if 0 <= tmp_i < row and 0 <= tmp_j < col and grid[tmp_i][tmp_j] == "1":
                            union(tmp_i * row + tmp_j, i * row + j)
        # print(f)
        res = set()
        for i in range(row):
            for j in range(col):
                if grid[i][j] == "1":
                    res.add(find((i * row + j)))
        return len(res)

時間復(fù)雜度:O(mn)
空間復(fù)雜度:O(nm)文章來源地址http://www.zghlxwxcb.cn/news/detail-850979.html

到了這里,關(guān)于LeetCode-200. 島嶼數(shù)量【深度優(yōu)先搜索 廣度優(yōu)先搜索 并查集 數(shù)組 矩陣】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【深度優(yōu)先搜索】和【廣度優(yōu)先搜索】的區(qū)別介紹

    【深度優(yōu)先搜索】和【廣度優(yōu)先搜索】的區(qū)別介紹

    深度優(yōu)先搜索(Depth-First Search,DFS)和廣度優(yōu)先搜索(Breadth-First Search,BFS)是兩種常見的圖搜索算法。它們的主要區(qū)別在于搜索的方式和順序不同。 從某個節(jié)點出發(fā),沿著一條路徑直到底部,然后返回到前一個節(jié)點,繼續(xù)搜索下一條路徑,直到搜索完整張圖。DFS使用?;蛘?/p>

    2024年02月06日
    瀏覽(16)
  • 深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)

    深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)

    深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)是圖論中兩個非常重要的算法,主要用于拓?fù)渑判?,尋路(走迷宮)和搜索引擎等。在我們寫算法時經(jīng)常會遇到需要使用DFS和BFS的題目,例如leetcode中的島嶼相關(guān)的問題以及有關(guān)樹的題目大多都會使用DFS或者BFS。 深度優(yōu)先搜索 深度優(yōu)

    2024年02月10日
    瀏覽(25)
  • 深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)

    深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)

    代碼隨想錄 深度優(yōu)先搜索和廣度優(yōu)先搜索,都是圖形搜索算法,它兩相似,又卻不同,在應(yīng)用上也被用到不同的地方。這里拿一起討論,方便比較。 先給大家說一下兩者大概的區(qū)別: 如果搜索是以接近起始狀態(tài)的程序依次擴(kuò)展?fàn)顟B(tài)的,叫廣度優(yōu)先搜索。 如果擴(kuò)展是首先擴(kuò)展

    2024年02月02日
    瀏覽(26)
  • 圖的遍歷之 深度優(yōu)先搜索和廣度優(yōu)先搜索

    圖的遍歷之 深度優(yōu)先搜索和廣度優(yōu)先搜索

    深度優(yōu)先搜索的圖文介紹 1. 深度優(yōu)先搜索介紹 圖的深度優(yōu)先搜索(Depth First Search),和樹的先序遍歷比較類似。 它的思想:假設(shè)初始狀態(tài)是圖中所有頂點均未被訪問,則從某個頂點v出發(fā),首先訪問該頂點,然后依次從它的各個未被訪問的鄰接點出發(fā)深度優(yōu)先搜索遍歷圖,直至

    2024年02月13日
    瀏覽(19)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】圖遍歷算法 ( 深度優(yōu)先搜索 DFS | 深度優(yōu)先搜索和廣度優(yōu)先搜索 | 深度優(yōu)先搜索基本思想 | 深度優(yōu)先搜索算法步驟 | 深度優(yōu)先搜索理論示例 )

    【數(shù)據(jù)結(jié)構(gòu)與算法】圖遍歷算法 ( 深度優(yōu)先搜索 DFS | 深度優(yōu)先搜索和廣度優(yōu)先搜索 | 深度優(yōu)先搜索基本思想 | 深度優(yōu)先搜索算法步驟 | 深度優(yōu)先搜索理論示例 )

    圖 的 遍歷 就是 對 圖 中的 結(jié)點 進(jìn)行遍歷 , 遍歷 結(jié)點 有如下兩種策略 : 深度優(yōu)先搜索 DFS 廣度優(yōu)先搜索 BFS \\\" 深度優(yōu)先搜索 \\\" 英文名稱是 Depth First Search , 簡稱 DFS ; DFS 基本思想 : 訪問第一個鄰接結(jié)點 : 從 起始點 出發(fā) , 該 起始點 可能有 若干 鄰接結(jié)點 , 訪問 第一個 鄰接結(jié)點

    2024年02月02日
    瀏覽(21)
  • 深度優(yōu)先搜索(DFS、深搜)和廣度優(yōu)先搜索(BFS、廣搜)

    深度優(yōu)先搜索(DFS、深搜)和廣度優(yōu)先搜索(BFS、廣搜)

    目錄 深度優(yōu)先搜索(DFS、深搜)和廣度優(yōu)先搜索(BFS、廣搜) 深度優(yōu)先搜索(簡稱“深搜”或DFS) 廣度優(yōu)先搜索 總結(jié) 深度優(yōu)先生成樹和廣度優(yōu)先生成樹 非連通圖的生成森林 深度優(yōu)先生成森林 廣度優(yōu)先生成森林 圖 1 無向圖 深度優(yōu)先搜索的過程類似于樹 的先序遍歷 ,首先

    2024年01月20日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)——圖篇(鄰接矩陣、鄰接表、深度優(yōu)先搜索、廣度優(yōu)先搜索)

    描述 圖比樹更為復(fù)雜,展現(xiàn)的是一種多對多的關(guān)系,圖的結(jié)構(gòu)是任意兩個數(shù)據(jù)對象之間都可能存在某種特定的關(guān)系的數(shù)據(jù)結(jié)構(gòu) 概念 頂點 : 基本介紹 頂點集合表示為V集合,要求圖中頂點至少要有一個,即V集合不能為空集。通常使用|V|來表示頂點的個數(shù),通常使用E(V)來表示

    2024年02月04日
    瀏覽(24)
  • 深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS),用代碼講原理

    深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS),用代碼講原理

    以圖文的形式對深度搜索和廣度搜索的理論進(jìn)行講解時,可能會對一些概念有些模糊,且不太清楚怎么把該理論用程序的方式進(jìn)行復(fù)現(xiàn)并解決這一搜索問題(這說的就是本人) 。所以后面我看完了一份實現(xiàn)這兩種搜索方法的代碼,在這做一個筆記,希望對大家有所幫助。 兩

    2024年04月12日
    瀏覽(20)
  • 力扣200. 島嶼數(shù)量

    思路: 假設(shè)在 (r, c) 格子位置,r 為所處行,c 為所處的列; 遇到陸地格子之后,遍歷搜索其上下左右周圍的陸地格子,但是不能超出邊界,即對應(yīng)的數(shù)組下標(biāo)不越界; 為了避免重復(fù)多次搜索,搜索到陸地格子之后將其標(biāo)記染色; 四周搜索完所有的陸地格子,即為一個島嶼;

    2024年02月04日
    瀏覽(17)
  • 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)筆記——圖的遍歷算法(深度優(yōu)先搜索和廣度優(yōu)先搜索)

    數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)筆記——圖的遍歷算法(深度優(yōu)先搜索和廣度優(yōu)先搜索)

    圖的遍歷指從圖中某一頂點出發(fā)(任意一個頂點都可以作為訪問的起始頂點),按照某種遍歷方法,對圖中所有的頂點訪問一次且只訪問一次。圖與樹不一樣,其中一個頂點可能與多個頂點相連,所以需記錄已訪問過的頂點,當(dāng)訪問一個頂點后,考慮如何選取下一個要訪問的

    2024年02月05日
    瀏覽(38)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包