LeetCode200. Number of Islands (思路及python解法)

Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.

Example 1:

Input:
11110
11010
11000
00000

Output: 1

感觉图形有点像扫雷哈哈。

这道题是我在BFS分类里找到的,不过BFS目前的方法会超时,等待以后做DFS时候再更新DFS算法。

BFS算法的思想就是建立一个deque()(双边队列),每次遇到第一个"1"以后,把它的(r,c)加入的队列。

把队列最左面的出列,先把他修改为"0",然后再去找他的上下左右,如果有"1",就属于同一个island,也加入到队列中,这样重复操作即可。

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        if len(grid)==0: return 0
        row, col = len(grid), len(grid[0])

        count = 0
        queue = collections.deque()
        steps = [[-1,0],[1,0],[0,-1],[0,1]]
        
        for i in range(row):
            for j in range(col):
                if grid[i][j]=='1' : 
                    count+=1
                    queue.append([i,j])
                    while queue:
                        x,y = queue.popleft()
                        grid[x][y] = '0'
                        for step in steps:
                            if 0<=x+step[0]<row and 0<=y+step[1]<col and grid[x+step[0]][y+step[1]] == '1':
                                queue.append([x+step[0] ,y+step[1]])
        return count  
        

等做到DFS来填坑

<think>好的,用户需要LeetCode热门100题的列表和解析。首先,我得确认用户的具体需求。他们可能在准备技术面试,需要重点练习高频题目。用户提到的引用内容中有几个参考来源,比如引用[1]到[4],里面提到了Top 100、Top 125等不同列表,需要整合这些信息。 首先,我应该整理出最常见的题目,比如Two Sum、Add Two Numbers这些经典问题,确保涵盖数据结构如链表、数组、字符串、树、动态规划等。每个题目需要给出简要思路和关键点,比如Two Sum用哈希表优化查找时间,Add Two Numbers如何处理进位。 然后,用户可能希望了解不同题型的解题方法,比如滑动窗口、哈希表、双指针、动态规划等。需要将这些方法对应到具体的题目中,帮助用户理解应用场景。例如,滑动窗口适用于子串问题,动态规划用于最长子序列或路径问题。 接下来,引用中的资源如GitHub仓库和题解版本(Java版)需要被提及,但用户可能更关注题目的解析而不是代码细节。因此,每个题目的解析应简明扼要,同时推荐相关资源供用户深入查阅。 另外,用户可能需要知道如何高效使用这些资源,比如按类型刷题或重复练习。因此,在最后给出学习建议会很有帮助,比如分模块练习和模拟面试环境。 最后,确保回答结构清晰,分点列出题目和解析,并附上相关问题,如学习策略和资源推荐,以满足用户潜在的需求。同时,注意引用标记的正确使用,避免遗漏任何引用来源。</think>以下是LeetCode热门100题的分类整理及核心解题思路分析,包含高频算法类型与典型题目解析: ### 一、数据结构与算法分类解析 1. **数组/字符串** - $1.\ \text{Two Sum}$:哈希表存储数值索引,时间复杂度优化到$O(n)$[^1] - $5.\ \text{Longest Palindromic Substring}$:中心扩散法时间复杂度$O(n^2)$,Manacher算法优化到$O(n)$ ```python # 中心扩散法示例 def expand(s, l, r): while l >=0 and r < len(s) and s[l] == s[r]: l -= 1 r += 1 return s[l+1:r] ``` 2. **链表操作** - $2.\ \text{Add Two Numbers}$:虚拟头节点处理进位,时间复杂度$O(\max(m,n))$ - $21.\ \text{Merge Two Sorted Lists}$:双指针比较节点值,空间复杂度$O(1)$ 3. **动态规划** - $53.\ \text{Maximum Subarray}$:状态转移方程$\text{dp}[i] = \max(\text{dp}[i-1]+nums[i], nums[i])$ - $70.\ \text{Climbing Stairs}$:斐波那契数列变种,空间可优化到$O(1)$ 4. **树结构** - $94.\ \text{Binary Tree Inorder Traversal}$:迭代解法需掌握栈的应用 $$ \text{时间复杂度:}O(n)\quad \text{空间复杂度:}O(h) $$ ### 二、典型题目解析示例 **15. 3Sum(三数之和)** - 排序+双指针法,时间复杂度$O(n^2)$ - 关键点:跳过重复元素,边界条件处理 ```python def threeSum(nums): nums.sort() res = [] for i in range(len(nums)-2): if i > 0 and nums[i] == nums[i-1]: continue l, r = i+1, len(nums)-1 while l < r: s = nums[i] + nums[l] + nums[r] if s < 0: l +=1 elif s > 0: r -=1 else: res.append([nums[i], nums[l], nums[r]]) while l < r and nums[l] == nums[l+1]: l +=1 while l < r and nums[r] == nums[r-1]: r -=1 l +=1; r -=1 return res ``` **200. Number of Islands(岛屿数量)** - DFS/BFS遍历,时间复杂度$O(mn)$ - 优化方向:原地修改矩阵标记访问状态 ### 三、学习资源推荐 1. 官方题解社区:查看最高票答案学习优化思路 2. GitHub代码仓库:引用[3]提供125题Java/Python实现 3. 专项练习建议: - 按算法类型集中训练(如连续3天专攻动态规划) - 定期进行模拟面试(限时60分钟完成3题)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值