当前位置: 首页 > news >正文

代码随想录算法训练营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  

相关文章:

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

代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙 文章目录 代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙17.太平洋大西洋水流问题一、DFS二、BFS三、本题总结 82…...

【全网最全】CSDN博客的文字颜色、字体和字号设置

文章目录 一、字体颜色二、字体大小三、字体类型四、字体背景色 在这篇博客中&#xff0c;我们将深入探讨如何在Markdown编辑器中设置文字颜色、大小、字体与背景色。Markdown本身并不直接支持这些功能&#xff0c;但通过结合HTML标签和CSS样式&#xff0c;我们可以实现这些视觉…...

C#实现数据采集系统-Mqtt实现采集数据转发

在数据采集系统中,通过ModbusTcp采集到数据之后,再通过MQTT转发到其他应用 MQTT操作 安装MQTT mqtt介绍和环境安装 使用MQTT 在C#/Net中使用Mqtt MQTT类封装 MQTT配置类 public class MqttConfig{public string Ip {get; set;...

common-intellisense:助力TinyVue 组件书写体验更丝滑

本文由体验技术团队Kagol原创~ 前两天&#xff0c;common-intellisense 开源项目的作者 Simon-He95 在 VueConf 2024 群里发了一个重磅消息&#xff1a; common-intellisense 支持 TinyVue 组件库啦&#xff01; common-intellisense 插件能够提供超级强大的智能提示功能&…...

图片在线压缩有效方法详解,分享7款最佳图片压缩工具免费(全新)

当您的系统中图片数量不断增加&#xff0c;却无法删除时&#xff0c;那么就需要通过图片压缩来解决您的问题。随着图片文件的增大&#xff0c;高分辨率图片占据了大量存储空间。而此时系统中的存储空间也开始变得不够用&#xff0c;无法跟上高质量图片的增长。因此&#xff0c;…...

electron安装及快速创建

electron安装及快速创建 electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 详细内容见官网&#xff1a;https://www.electronjs.org/zh/docs/latest/。 今天来记录下练习中的安装过程和hello world的创建。 创建项目文件夹&#xff0c;并执行npm 初始化命…...

需要消化的知识点

需要消化 消灭清单 如何自定义一个Interceptor拦截器&#xff1f; 后端开发可以用上的前端技巧 10个堪称神器的 Java 学习网站. 【前端胖头鱼】11 chrome高级调试技巧&#xff0c;学会效率直接提升666% 【前端胖头鱼】10个我经常逛的“小网站” 【前端劝退师lv-6】Chrome D…...

2024年7月25日(Git gitlab以及分支管理 )

分布式版本控制系统 一、Git概述 Git 是一种分布式版本控制系统,用于跟踪和管理代码的变更。它是由Linus Torvalds创建的,最 初被设计用于Linux内核的开发。Git允许开发人员跟踪和管理代码的版本,并且可以在不同的开 发人员之间进行协作。 Github 用的就是Git系统来管理它们的…...

pdf格式过大怎么样变小 pdf文件过大如何缩小上传 超实用的简单方法

面对体积庞大的 PDF 文件&#xff0c;我们常常需要寻找有效的方法来缩减其大小。这不仅能够优化存储空间&#xff0c;还能提升文件的传输和打开速度。PDF文件以其稳定性和跨平台兼容性成为工作和学习中的重要文件格式。然而&#xff0c;当我们需要通过邮件发送或上传大文件时&a…...

前端文件下载word乱码问题

记录一次word下载乱码问题&#xff1a; 用的请求是axios库&#xff0c;然后用Blob去接收二进制文件 思路&#xff1a;现在的解决办法有以下几种&#xff0c;看看是对应哪种&#xff0c;可以尝试解决 1.将响应类型设为blob&#xff0c;这也是最重要的&#xff0c;如果没有解决…...

repo中的default.xml文件project name为什么一样?

文章目录 default.xml文件介绍为什么 name 是一样的&#xff0c;path 不一样&#xff1f;总结 default.xml文件介绍 在 repo 工具的 default.xml 文件中&#xff0c;定义了多个 project 元素&#xff0c;每个元素都代表一个 Git 仓库。 XML 定义了多个不同的 project 元素&…...

<section id=“nice“ data-tool=“mdnice编辑器“ data-webs

大模型日报 2024-07-24 大模型资讯 Meta发布最大Llama 3 AI模型&#xff0c;语言和数学能力提升 摘要: Meta公司发布了其迄今为止最大的Llama 3人工智能模型。该模型主要免费提供&#xff0c;具备多语言处理能力&#xff0c;并在语言和数学方面表现出显著提升。 Meta发布最强AI…...

作业7.26~28

全双工&#xff1a; 通信双方 既可以发送&#xff0c;也可以接收数据 1. 利用多线程 或者 多进程&#xff0c; 实现TCP服务器 和 客户端的全双工通信 思路&#xff1a; 服务器和客户端&#xff0c; 在建立通信以后&#xff0c;可以创建线程&#xff0c;在线程编写另一个功能代…...

自定义webIpad证件相机(webRTC)

该技术方案可用于各浏览器自定义相机开发 相机UI&#xff08;index.html&#xff09; <!DOCTYPE html> <html lang"zh" prew"-1"><head><meta charset"UTF-8"><meta name"viewport"content"user-sc…...

GO发票真伪批量查验方法、数电票查验接口

“教”给机器标注数据的正确率就决定了人工智能判断的正确率。翔云人工智能开放平台的OCR产品经过我们的开发人员精心调“教”&#xff0c;识别率高、识别速度快。 发票&#xff0c;是发生的成本、费用或收入的原始凭证。于公司来说&#xff0c;发票主要是公司做账的依据&…...

【Go系列】Go的UI框架Fyne

前言 总有人说Go语言是一门后端编程语言。 Go虽然能够很好地处理后端开发&#xff0c;但是者不代表它没有UI库&#xff0c;不能做GUI&#xff0c;我们一起来看看Go怎么来画UI吧。 正文 Go语言由于其简洁的语法、高效的性能和跨平台的编译能力&#xff0c;非常适合用于开发GUI…...

.NET MAUI:跨平台开发的未来

常用资源 &#xff08;1&#xff09;.NET MAUI8构建应用文档。 Build your first .NET MAUI app - .NET MAUI | Microsoft Learn 一、什么是 .NET MAUI&#xff1f; .NET Multi-platform App UI (.NET MAUI) 是微软推出的一款跨平台开发框架。作为 Xamarin.Forms 的下一代产…...

VSCode切换默认终端

我的VSCode默认终端为PowerShell&#xff0c;每次新建都会自动打开PowerShell。但是我想让每次都变为cmd&#xff0c;也就是Command Prompt 更改默认终端的操作方法如下&#xff1a; 键盘调出命令面板&#xff08;CtrlShiftP&#xff09;中,输入Terminal: Select Default Prof…...

卫星观测叶绿素的相反信号

Contrasted Trends in Chlorophyll-a Satellite Products 运用卫星产品研究Chl的长时间序列变化时需要注意 Introduction &#xff08;1&#xff09;研究叶绿素的长期变化&#xff0c;需要至少40年的长时间序列&#xff1b; &#xff08;2&#xff09;Tian and Zhang 2023报告…...

2024年最新NVIDIA T4价格表及行业趋势!

英伟达&#xff08;NVIDIA&#xff09;作为目前全球T0级别的GPU制造商&#xff0c;其T4系列显卡以其卓越的计算性能和能效比&#xff0c;在数据中心、云计算及AI领域占据重要地位。 一、NVIDIA T4价格表概览 在探讨NVIDIA T4显卡的价格时&#xff0c;我们需要从直接购买和租赁…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...