代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙

代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙


文章目录

  • 代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙
  • 17.太平洋大西洋水流问题
    • 一、DFS
    • 二、BFS
    • 三、本题总结
  • 827.最大人工岛
    • 一、DFS 用全局变量得到area
    • 二、DFS 用局部变量
    • 三、BFS
  • 127. 单词接龙
    • 一、BFS


17.太平洋大西洋水流问题

题目链接

一、DFS

class Solution(object):def pacificAtlantic(self, heights):""":type heights: List[List[int]]:rtype: List[List[int]]"""m,n=len(heights),len(heights[0])dirs = [(-1,0),(0,1),(1,0),(0,-1)]pacific=[[0]*n for _ in range(m)]atlantic=[[0]*n for _ in range(m)]result=[] # DFSdef dfs(x,y,ocean):ocean[x][y]=1for d in dirs:nextx,nexty=x+d[0],y+d[1]if 0 <= nextx < m and 0 <= nexty < n  and heights[nextx][nexty] >=heights[x][y] and ocean[nextx][nexty]==0:dfs(nextx,nexty,ocean)for i in range(m):dfs(i,0,pacific)dfs(i,n-1,atlantic)for j in range(n):dfs(0,j,pacific)dfs(m-1,j,atlantic)for i in range(m):for j in range(n):if pacific[i][j]==1 and atlantic[i][j]==1:result.append([i,j])return result

二、BFS

class Solution(object):def pacificAtlantic(self, heights):""":type heights: List[List[int]]:rtype: List[List[int]]"""m,n=len(heights),len(heights[0])dirs = [(-1,0),(0,1),(1,0),(0,-1)]pacific=[[0]*n for _ in range(m)]atlantic=[[0]*n for _ in range(m)]result=[] # BFSdef bfs(x,y,ocean):q=collections.deque()q.append((x,y))ocean[x][y]=1while q:x,y = q.popleft()for d in dirs:nextx,nexty=x+d[0],y+d[1]if 0 <= nextx < m and 0 <= nexty < n  and heights[nextx][nexty] >=heights[x][y] and ocean[nextx][nexty]==0:ocean[nextx][nexty]=1q.append((nextx,nexty))for i in range(m):bfs(i,0,pacific)bfs(i,n-1,atlantic)for j in range(n):bfs(0,j,pacific)bfs(m-1,j,atlantic)for i in range(m):for j in range(n):if pacific[i][j]==1 and atlantic[i][j]==1:result.append([i,j])return result

三、本题总结

用两个visited来表示


827.最大人工岛

题目链接

一、DFS 用全局变量得到area

class Solution(object):def largestIsland(self, grid):""":type grid: List[List[int]]:rtype: int"""'''总体思路利用 DFS 计算出各个岛屿的面积,并标记每个 1(陆地格子)属于哪个岛。遍历每个 0,统计其上下左右四个相邻格子所属岛屿的编号,去重后,累加这些岛的面积,更新答案的最大值。'''m,n = len(grid),len(grid[0])dirs = [(-1,0),(0,1),(1,0),(0,-1)]area = collections.defaultdict(int) # 用于储存岛屿面积def dfs(x,y,island_num): # 输入岛屿编号grid[x][y]=island_num area[island_num] += 1 # 更新岛屿面积for d in dirs:nextx,nexty=x+d[0],y+d[1]if 0 <= nextx < m and 0 <= nexty < n  and grid[nextx][nexty]==1:grid[nextx][nexty]=island_numdfs(nextx,nexty,island_num)island_num = 1 for i in range(m):for j in range(n):if grid[i][j]==1: # 遇到新岛屿island_num += 1 # 岛屿编号从2开始dfs(i,j,island_num) ans=0for i in range(m):for j in range(n):s=set() # 去重if grid[i][j]==0:for d in dirs:nexti,nextj=i+d[0],j+d[1]if 0 <= nexti < m and 0 <= nextj < n  and grid[nexti][nextj]!=0:s.add(grid[nexti][nextj])ans = max(ans,1+sum(area[idx] for idx in s))return ans if ans else n*n # 如果最后 ans 仍然为 0,说明所有格子都是 1,返回 n^2

二、DFS 用局部变量

class Solution(object):def largestIsland(self, grid):""":type grid: List[List[int]]:rtype: int"""'''总体思路
利用 DFS 计算出各个岛屿的面积,并标记每个 1(陆地格子)属于哪个岛。
遍历每个 0,统计其上下左右四个相邻格子所属岛屿的编号,去重后,累加这些岛的面积,更新答案的最大值。'''m,n = len(grid),len(grid[0])dirs = [(-1,0),(0,1),(1,0),(0,-1)]area = collections.defaultdict(int) # 用于储存岛屿面积def dfs(x,y,island_num): # 输入岛屿编号grid[x][y]=island_num size=1# area[island_num] += 1 # 更新岛屿面积for d in dirs:nextx,nexty=x+d[0],y+d[1]if 0 <= nextx < m and 0 <= nexty < n  and grid[nextx][nexty]==1:grid[nextx][nexty]=island_numsize += dfs(nextx,nexty,island_num)return size # 得到岛屿的面积island_num = 1 for i in range(m):for j in range(n):if grid[i][j]==1: # 遇到新岛屿island_num += 1 # 岛屿编号从2开始area[island_num]=dfs(i,j,island_num) ans=0for i in range(m):for j in range(n):s=set() # 去重if grid[i][j]==0:for d in dirs:nexti,nextj=i+d[0],j+d[1]if 0 <= nexti < m and 0 <= nextj < n  and grid[nexti][nextj]!=0:s.add(grid[nexti][nextj])ans = max(ans,1+sum(area[idx] for idx in s))return ans if ans else n*n # 如果最后 ans 仍然为 0,说明所有格子都是 1,返回 n^2

三、BFS

class Solution(object):def largestIsland(self, grid):""":type grid: List[List[int]]:rtype: int"""'''总体思路
利用 DFS 计算出各个岛屿的面积,并标记每个 1(陆地格子)属于哪个岛。
遍历每个 0,统计其上下左右四个相邻格子所属岛屿的编号,去重后,累加这些岛的面积,更新答案的最大值。'''# BFSdef bfs(x,y,island_num): # 输入岛屿编号grid[x][y]=island_num size=1# area[island_num] += 1 # 更新岛屿面积q=collections.deque()q.append((x,y))while q:x,y=q.popleft()for d in dirs:nextx,nexty=x+d[0],y+d[1]if 0 <= nextx < m and 0 <= nexty < n  and grid[nextx][nexty]==1:grid[nextx][nexty]=island_numq.append((nextx,nexty))size += 1return sizeisland_num = 1 for i in range(m):for j in range(n):if grid[i][j]==1: # 遇到新岛屿island_num += 1 # 岛屿编号从2开始# dfs(i,j,island_num) # 法1area[island_num]=bfs(i,j,island_num) ans=0for i in range(m):for j in range(n):s=set() # 去重if grid[i][j]==0:for d in dirs:nexti,nextj=i+d[0],j+d[1]if 0 <= nexti < m and 0 <= nextj < n  and grid[nexti][nextj]!=0:s.add(grid[nexti][nextj])ans = max(ans,1+sum(area[idx] for idx in s))return ans if ans else n*n # 如果最后 ans 仍然为 0,说明所有格子都是 1,返回 n^2

127. 单词接龙

题目链接

在这里插入图片描述
在这里插入图片描述

一、BFS

class Solution(object):def ladderLength(self, beginWord, endWord, wordList):""":type beginWord: str:type endWord: str:type wordList: List[str]:rtype: int"""wordset = set(wordList)if len(wordList)==0 or endWord not in wordset :return 0q = collections.deque()q.append(beginWord)visited=set(beginWord)step=1while q:level = len(q)for l in range(level):word = q.popleft()word_list = list(word)for i in range(len(word_list)):origin_char=word_list[i]for j in range(26):word_list[i] = chr(ord('a')+j)new_word = ''.join(word_list)if new_word in wordset:if new_word == endWord:return step+1if new_word not in visited:q.append(new_word)visited.add(new_word)word_list[i]=origin_charstep +=1return 0  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3266355.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

如何在测试中保护用户隐私!

在当今数据驱动的时代&#xff0c;用户隐私保护成为了企业和开发团队关注的焦点。在软件测试过程中&#xff0c;处理真实用户数据时保护隐私尤为重要。本文将介绍如何在测试中保护用户隐私&#xff0c;并提供具体的方案和实战演练。 用户隐私保护的重要性 用户隐私保护不仅是法…

Docker安装kkFileView实现在线文件预览

kkFileView为文件文档在线预览解决方案,该项目使用流行的spring boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等 官方文档地址:https://kkview.cn/zh-cn/docs/production.html 一、拉取镜像 do…

ubuntu光盘启动报错 Initramfs unpacking failed:write error ...No working init found

在FreeBSD的bhyve虚拟机里&#xff0c;使用ubuntu光盘启动&#xff0c;报错 Initramfs unpacking failed:write error Failed to execute /init.(error -2) Kernel panic -not syncing:No working init found . Try passing initoption to kernel .See Linux Documentation …

iOS ------ Block的相关问题

Block的定义 Block可以截获局部变量的匿名函数&#xff0c; 是将函数及其执行上下文封装起来的对象。 Block的实现 通过Clang将以下的OC代码转化为C代码 // Clang xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m//main.m #import <Foundation/Foundation.…

【北京仁爱堂】正确识别痉挛性斜颈

痉挛性斜颈是一种累及颈部区域的局限性肌张力障碍&#xff0c;表现为颈肌阵发性的不自主收缩&#xff0c;引起头向一侧扭转或阵性倾斜。 它是一种锥体外系运动障碍&#xff0c;是一种独立的器质性疾病。然而精神因素如焦虑、反应性抑郁症等对此病的症状轻重起着一定的调整作用&…

【Python大语言模型系列】基于阿里云人工智能平台采用P-Tuning v2微调ChatGLM2-6B大模型(完整教程)

这是我的第331篇原创文章。 一、引言 P-Tuning 是一种对预训练语言模型进行少量参数微调的技术。所谓预训练语言模型&#xff0c;就是指在大规模的语言数据集上训练好的、能够理解自然语言表达并从中学习语言知识的模型。P-Tuning 所做的就是根据具体的任务&#xff0c;对预训练…

单元测试的最佳实践

整体架构 合适的架构可以提升可测试性。比如菱形对称架构的模块化和解耦特性使得系统各个部分可以独立进行单元测试。这不仅提高了测试的效率&#xff0c;还能够减少测试的依赖性&#xff0c;提高测试准确性。 代码设计 代码设计和可测试性有密切关联。强烈建议一个方法的代码行…

opencascade AIS_MouseGesture AIS_MultipleConnectedInteractive源码学习

AIS_MouseGesture //! 鼠标手势 - 同一时刻只能激活一个。 enum AIS_MouseGesture { AIS_MouseGesture_NONE, //!< 无激活手势 // AIS_MouseGesture_SelectRectangle, //!< 矩形选择&#xff1b; //! 按下按钮开始&#xff0c;移动鼠标定义矩形&…

分布式相关理论详解

目录 1.绪论 2.什么是分布式系统&#xff0c;和集群的区别 3.CAP理论 3.1 什么是CAP理论 3.2 一致性 3.2.1 计算机的一致性说明 1.事务中的一致性 2.并发场景下的一致性 3.分布式场景下的一致性 3.2.2 一致性分类 3.2.3 强一致性 1.线性一致性 a) 定义 a) Raft算法…

跟李沐学AI:池化层

目录 二维最大池化 填充、步幅和多个通道 平均池化层 池化层总结 二维最大池化 返回滑动窗口中的最大值。 图为池化窗口形状为 22 的最大池化层。着色部分是第一个输出元素&#xff0c;以及用于计算这个输出的输入元素: max(0,1,3,4)4。池化层与卷积层类似&#xff0c;不断…

职业本科专业群的生成机制研究

一、引言 随着我国经济结构的持续优化升级和职业教育体系的不断深化&#xff0c;职业本科教育作为连接高等教育与职业技能培养的桥梁&#xff0c;其专业群构建已成为提升教育质量与服务产业升级的关键。本文基于知识整合的视角&#xff0c;采用案例分析法&#xff0c;从生成决…

自定义协议(应用层协议)——网络版计算机基于TCP传输协议

应用层&#xff1a;自定义网络协议&#xff1a;序列化和反序列化&#xff0c;如果是TCP传输的&#xff1a;还要关心区分报文边界&#xff08;在序列化设计的时候设计好&#xff09;——粘包问题 1、首先想要使用TCP协议传输的网络&#xff0c;服务器和客户端都应该要创建自己…

Pytorch使用教学8-张量的科学运算

在介绍完PyTorch中的广播运算后&#xff0c;继续为大家介绍PyTorch的内置数学运算&#xff1a; 首先对内置函数有一个功能印象&#xff0c;知道它的存在&#xff0c;使用时再查具体怎么用其次&#xff0c;我还会介绍PyTorch科学运算的注意事项与一些实用小技巧 1 基本数学运算…

wpf中轮询显示图片

本文的需求是&#xff0c;在一个文件夹中&#xff0c;放一堆图片的集合&#xff0c;然后在wpf程序中&#xff0c;按照定时的方式&#xff0c;循序显示照片。 全部代码 1.声明一个PictureInfo类 namespace WpfApp1 {public class PictureInfo{public string? FileName { get; …

【网络安全学习】 SQL注入01:基础知识

&#x1f4bb; 1. 什么是SQL注入 SQL注入是一种针对Web程序中数据库层的安全漏洞的攻击方式。它利用了程序对用户输入数据合法性的判断或过滤不严&#xff0c;允许攻击者在设计不良的程序中添加额外的SQL语句&#xff0c;从而执行计划外的命令或访问未授权的数据。攻击者可以通…

视觉SLAM第一讲

第一讲-预备知识 SLAM是什么&#xff1f; SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;是同时定位与地图构建。 它是指搭载特定传感器的主体&#xff0c;在没有环境先验信息的情况下&#xff0c;于运动过程中建立环境的模型&#xff0c;同时估计自己…

Chapter 16 Python文件操作(上)

欢迎大家订阅【Python从入门到精通】专栏&#xff0c;一起探索Python的无限可能&#xff01; 文章目录 前言一、文件的编码二、文件的读取1.打开文件2.读取文件3.关闭文件 前言 Python作为一种高效且易于学习的编程语言&#xff0c;提供了一系列强大的文件操作功能&#xff0c…

C++STL详解(五)——list类的接口详解

一.list的介绍 list容器的底层是双向循环带头链表&#xff0c;在CPP中&#xff0c;我们对双向循环带头链表进行了一定程度的封装。 如果你不了解双向链表&#xff0c;那么可以浏览此片博文&#xff1a;双向链表 二.list的定义方式以及赋值 2.1list的构造方式 在这里我们要…

idea中如何创建yml、yaml、properties配置文件

目录 1、配置文件 2、创建yml配置文件 3、配置文件的优先级 1、配置文件 我们一直使用springboot项目创建完毕后自带的application.properties进行属性的配置&#xff0c;那其实呢&#xff0c;在springboot项目当中是支持多种配置方式的&#xff0c;除了支持properties配置文件…

华为od机试真题:考勤信息(Python)

题目描述 公司用一个字符串来表示员工的出勤信息 absent:缺勒late: 迟到leaveearly: 早退present: 正常上班 现需根据员工出勤信息&#xff0c;判断本次是否能获得出勤奖&#xff0c;能获得出勤奖的条件如下: 缺勤不超过一次&#xff0c;没有连续的迟到/早退:任意连续7次考…