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

【LeetCode】133.克隆图

本题的一个难点是:

1. 题目

这是一道很好的题目,至少把目前的我给困住了。

2. 分析

我的思路是深度搜索,深搜的同时记录上一次访问的节点(也就是当前节点的父节点)是什么。然后记录一个节点关系即可,代码如下:

"""
# Definition for a Node.
class Node:def __init__(self, val = 0, neighbors = None):self.val = valself.neighbors = neighbors if neighbors is not None else []
"""from typing import Optional
class Solution:def cloneGraph(self, node: Optional['Node']) -> Optional['Node']:vis = set() # 正在访问的节点pre = Noneroot = self.dfs(pre, node, vis)print(root.val)return rootdef dfs(self, pre, cur, vis):print("1",cur.val)node = Node()if cur:vis.add(cur.val)node.val = cur.valelse:returnif pre :pre.neighbors.append(node)node.neighbors.append(pre)# 找出所有的邻居节点for nei in cur.neighbors:print("2",nei.val)if nei.val not in vis:self.dfs(node, nei, vis)return node

上面这版代码存在的一个问题是:就是存在漏访问的情况。也就是如下这两行红框中的代码导致:
在这里插入图片描述

例如在样例:[[2,4],[1,3],[2,4],[1,3]]中(对应的图是如下所示),
在这里插入图片描述
这版代码就会造成1<=>4 的漏访问。更深层次的原因是:这版代码是在深搜的时候clone对应的节点,但如果没深搜到这个节点,就没法clone这个邻居,而vis数组导致不会深搜到这个节点,从而产生遗漏。

3. 代码

我看了一下官方题解,代码写的确实比我好。官方题解的思想就是:使用一个哈希表存储某个节点被clone的节点。如果某节点没有被clone过,那么继续深搜;如果有,那么及时返回。在深搜的过程中维护好邻居关系即可。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C#中常用集合类型
  • 室内宠物空气净化器哪个好?排名靠前室内宠物空气净化器使用感受
  • 详解Xilinx FPGA高速串行收发器GTX/GTP(3)--GTX的时钟架构
  • 白骑士的PyCharm教学高级篇 3.2 多模块项目管理
  • 谷粒商城实战笔记-129-商城业务-商品上架-nested数据类型场景
  • 用Java构建简单ATM系统
  • 白骑士的PyCharm教学进阶篇 2.5 数据库连接与管理
  • 基于深度学习的大规模模型训练
  • 无代码开发AI服务 - 利用向量库Kendra和Llama大模型在亚马逊云科技AWS上创建RAG知识库
  • 基于Qt的视频剪辑
  • informer中的WorkQueue机制的实现分析与源码解读(1)
  • Netty的几种IO模式的实现与切换
  • Flask基础教程(第一阶段)
  • JAVA—面向对象编程高级
  • 《死侍与金刚狼》票房飘红! 目前全球票房总票房$7亿,预计可达$12亿,全球排名跃居第二!
  • 深入了解以太坊
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • angular组件开发
  • canvas 绘制双线技巧
  • CAP理论的例子讲解
  • CentOS7简单部署NFS
  • E-HPC支持多队列管理和自动伸缩
  • exports和module.exports
  • JDK 6和JDK 7中的substring()方法
  • JDK9: 集成 Jshell 和 Maven 项目.
  • js递归,无限分级树形折叠菜单
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Redash本地开发环境搭建
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 两列自适应布局方案整理
  • 排序算法之--选择排序
  • 普通函数和构造函数的区别
  • 微信小程序设置上一页数据
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 阿里云移动端播放器高级功能介绍
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (1)Jupyter Notebook 下载及安装
  • (2.2w字)前端单元测试之Jest详解篇
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (ros//EnvironmentVariables)ros环境变量
  • (Ruby)Ubuntu12.04安装Rails环境
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (过滤器)Filter和(监听器)listener
  • (回溯) LeetCode 131. 分割回文串
  • (接口自动化)Python3操作MySQL数据库
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET6实现破解Modbus poll点表配置文件
  • .NET导入Excel数据