695.島嶼的最大面積

解題思路

深度優先搜索:
當遍歷到網格中的一塊土地時,如果沒有訪問過,則對其進行訪問,置訪問標記,並且對其四周的土地遞歸進行訪問,每訪問到一塊以前未訪問過的土地,那麼數量就加1,最後返回該土地所連接的島嶼面積。
(爲了確保每個土地訪問不超過一次,我們每次經過一塊土地時,將這塊土地的值置爲 0。這樣就不會多次訪問同一土地)
最後比較歷次訪問過的面積,取最大值即可。

複雜度分析:
時間複雜度:O(R * C)。其中 R 是給定網格中的行數,C 是列數。我們訪問每個網格最多一次。
空間複雜度:O(R * C),遞歸的深度最大可能是整個網格的大小,因此最大可能使用 O(R * C) 的棧空間。

代碼

class Solution:
    def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
        # 深度優先搜索
        def dfs(grid: List[List[int]], i, j):
            if(i<0 or i>=len(grid) or j<0 or j>=len(grid[0]) or grid[i][j]==0):
                return 0
            grid[i][j] = 0 # 已經訪問過的土地置爲0
            count = 1
            count += dfs(grid, i-1, j) # 上
            count += dfs(grid, i+1, j) # 下
            count += dfs(grid, i, j-1) # 左
            count += dfs(grid, i, j+1) # 右
            return count
        res = 0
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j]==1:
                    res = max(res, dfs(grid, i, j))
        return res
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章