leetcode 1466

leetcode 1466

使用dfs 遍历图结构
在这里插入图片描述
如图 node 4 -> node 0 -> node 1
因为节点数是n, 边长数量是n-1。所以如果是从0出发的路线,都需要修改,反之,如果是通向0的节点,例如节点4,则把节点4当作父节点的节点,之间的路线的方向都需修改。
两个节点间只有一条方向,所以可以确定如何修改,取决和0节点的关系。

如图 node 0 -> node 1 -> node 3 <- node 2
dfs (0, -1, e) -> dfs (1, 0, e) -> dfs(3, 1, e)
e[3][0].first = 1 == parent continue;
e[3][1].first = 2 != parent 但是 e[3][1].second =0, 所以不增加长度。

如图 (0 -> 1), 使用 e[0][1] = 1 和 e[1][0] = 0 的表达方式。

数据结构

vector<vector<pair<int, int>>>

这个数据结构是一个二维的向量(vector),其中每个元素都是一个pair<int, int>类型的元素。可以将其理解为一个邻接表的表示方式。

具体来说,这个数据结构可以表示一个有n个顶点的图,其中每个顶点v都有一个对应的向量e[v],该向量存储了与顶点v相邻的顶点以及它们之间的边的信息。

每个pair<int, int>元素表示一条边,其中第一个int表示与顶点v相邻的顶点,第二个int表示边的权重或其他相关信息。

例如:e[0] = {{1, 2}, {3, 4}},则表示顶点0与顶点1之间有一条权重为2的边,以及顶点0与顶点3之间有一条权重为4的边。
例如: e[0][1] = {1,2}

这种数据结构在表示稀疏图时非常有效,因为它只存储了实际存在的边,而不需要为所有可能的边分配空间。同时,通过使用向量而不是链表,可以提高访问和遍历的效率。

vector<vector > 和 vector<vector<pair<int, int>>>

vector<vector<int>>vector<vector<pair<int, int>>>在内存上的差别主要体现在存储的数据类型和元素的大小上。

对于vector<std::vector<int>>,它是一个二维向量,其中每个元素都是一个一维向量,而每个一维向量存储了一系列int类型的元素。因此,内存中会按照一维向量的方式存储每个元素,每个元素之间是连续存储的。这意味着在内存中,整个二维向量是一段连续的内存空间。

而对于vector<vector<pair<int, int>>>,它也是一个二维向量,但每个元素是一个一维向量,而每个一维向量存储了一系列pair<int, int>类型的元素。因为pair<int, int>占用的内存空间更大,所以每个元素之间的存储空间可能不是连续的,而是分散存储的。

具体来说,对于vector<std::vector<int>>,内存中的存储布局可能类似于以下示意图:

[元素1][元素2][元素3]...

而对于vector<vector<pair<int, int>>>,内存中的存储布局可能类似于以下示意图:

[元素1-1][元素1-2][元素2-1][元素2-2][元素3-1][元素3-2]...

其中,每个元素1-1、1-2、2-1、2-2等表示pair<int, int>类型的元素。

因此,vector<std::vector<int>>在内存上是连续存储的,而vector<vector<pair<int, int>>>可能是分散存储的,每个元素之间的存储空间可能不是连续的。这也是它们在内存上的主要差别。

向量和链表

向量和链表在存储效率上有一些差异,这取决于具体的操作和使用场景。

向量(vector)是一个动态数组,它使用连续的内存块来存储元素。这意味着向量可以通过索引来快速访问元素,并且在尾部进行插入和删除操作的效率也很高。然而,在向量中间进行插入和删除操作可能涉及到移动元素的操作,这会导致效率降低。此外,当向量的大小超过当前分配的内存容量时,可能需要重新分配更大的内存块,并将现有元素复制到新的内存块中,这也会带来一定的开销。

链表(linked list)是由一系列节点组成的数据结构,每个节点包含数据和指向下一个节点的指针。链表的插入和删除操作在任意位置都很高效,因为它只需要调整节点的指针,而不需要移动其他元素。然而,链表的随机访问效率较低,因为需要从头节点开始遍历链表直到找到目标位置。此外,链表的存储空间相对于向量来说更加分散,因为每个节点需要额外的指针来指向下一个节点。

综上所述,向量适用于需要频繁进行随机访问、尾部插入和删除操作的场景,而链表适用于需要频繁进行插入和删除操作、对随机访问性能要求较低的场景。选择使用哪种数据结构取决于具体的操作和使用需求。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

保障网络安全:了解威胁检测和风险评分的重要性

在当今数字时代&#xff0c;网络安全问题变得愈发突出&#xff0c;而及时发现和迅速应对潜在威胁成为保障组织信息安全的首要任务。令人震惊的是&#xff0c;根据2023年的数据&#xff0c;平均而言&#xff0c;检测到一次网络入侵的时间竟然长达207天。这引起了对安全策略和技术…

威睿三合一电驱动系统斩获“2023汽车新供应链百强-金辑奖”

10月19日&#xff0c;2023第五届“金辑奖”颁奖盛典在上海圆满落幕。威睿公司“高效低噪碳化硅电驱动系统”在动力总成电气化领域脱颖而出&#xff0c;荣获“2023中国汽车新供应链百强”荣誉称号。 “金辑奖”由盖世发起&#xff0c;旨在“发现好公司推广好技术成就汽车人”&a…

利用机器学习实现客户细分:提升市场营销效果的技术策略

客户细分是一项关键的市场营销策略&#xff0c;可以帮助企业更好地了解其目标受众&#xff0c;个性化定制产品和服务&#xff0c;提高市场营销效果。本文将介绍如何利用机器学习算法实现客户细分&#xff0c;包括数据准备、特征工程、算法选择、模型训练和评估等关键步骤。通过…

一文5000字从0到1构建高效的接口自动化测试框架思路

在选择接口测试自动化框架时&#xff0c;需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说&#xff0c;使用Python相关的测试框架更为便捷。无论选择哪种框架&#xff0c;重要的是确保 框架功能完备&#xff0c;易于维护和扩展&#xff0c;提高测试效率和准确性。…

雪花算法详细讲解

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

36、什么是池化算法

池化算法也是 CNN 网络中非常常见的算法。 池化这一算法理解起来比较简单,从名字中或许可以看到一些东西:从一个像素池子中选取一些有代表性的像素出来。 常见的池化有最大池化和平均池化。最大池化就是从像素池子中选取最大值出来,而平均池化就是从像素池子中选取平均值出…

MySQL8.0默认配置详解--持续更新中

binlog日志的默认保留数量和大小 在MySQL 8.0中&#xff0c;您可以使用以下SQL命令来查询binlog日志的默认保留数量和大小&#xff1a; SHOW VARIABLES LIKE binlog_expire_logs_seconds; SHOW VARIABLES LIKE max_binlog_size;binlog_expire_logs_seconds 变量表示binlog日志…

Linux---mkdir和rm命令选项

1. mkdir命令选项 命令选项说明-p创建所依赖的文件夹 mkdir命令选项效果图: 2. rm命令选项 命令选项说明-i交互式提示-r递归删除目录及其内容-f强制删除&#xff0c;忽略不存在的文件&#xff0c;无需提示-d删除空目录 rm -i命令选项效果图: rm -r命令选项效果图: rm -f命…

【c】数组元素移动

本题的难点之处就是不让你创建新的数组&#xff0c;而且移动的距离也没有给限制&#xff0c;比如有7个数&#xff0c;本题没有限制必须移动距离小于7&#xff0c;也可能移动的距离大于7&#xff0c;甚至更多&#xff0c;下面附上我的代码 #include<stdio.h>int main() {…

RK3568平台 OTA升级原理

一.前言 在迅速变化和发展的物联网市场&#xff0c;新的产品需求不断涌现&#xff0c;因此对于智能硬件设备的更新需求就变得空前高涨&#xff0c;设备不再像传统设备一样一经出售就不再变更。为了快速响应市场需求&#xff0c;一个技术变得极为重要&#xff0c;即OTA空中下载…

关于“Python”的核心知识点整理大全12

目录 6.3.3 按顺序遍历字典中的所有键 6.3.4 遍历字典中的所有值 6.4 嵌套 6.4.1 字典列表 aliens.py 6.4.2 在字典中存储列表 pizza.py favorite_languages.py 注意 往期快速传送门&#x1f446;&#xff08;在文章最后&#xff09;&#xff1a; 6.3.3 按顺序遍历字…

VR全景技术对房产行业有什么好处,如何帮助展示户型

引言&#xff1a; 随着科技的飞速发展&#xff0c;VR全景技术逐渐走入我们的生活&#xff0c;为我们带来了前所未有的沉浸式体验。在房产行业&#xff0c;VR全景技术正逐渐改变传统的户型和样板间展示方式&#xff0c;为购房者带来更为直观、真实的购房体验。 一、VR全景技术在…

Docker多平台安装与配置指南

Docker的流行使得它成为开发者和运维人员不可或缺的工具。在本文中&#xff0c;将深入探讨如何在不同平台上安装和配置Docker&#xff0c;旨在为大家提供详尽的指南&#xff0c;确保他们能够顺利地使用这一强大的容器化工具。 Docker基础概念回顾 Docker利用容器技术&#xf…

回溯热门问题

关卡名 回溯热门问题 我会了✔️ 内容 1.组合总和问题 ✔️ 2.分割回文串问题 ✔️ 3.子集问题 ✔️ 4.排列问题 ✔️ 5.字母全排列问题 ✔️ 6.单词搜索 ✔️ 1. 组合总和问题 LeetCode39题目要求&#xff1a;给你一个无重复元素的整数数组candidates和一个目标整数 ta…

leetcode做题笔记2132. 用邮票贴满网格图

给你一个 m x n 的二进制矩阵 grid &#xff0c;每个格子要么为 0 &#xff08;空&#xff09;要么为 1 &#xff08;被占据&#xff09;。 给你邮票的尺寸为 stampHeight x stampWidth 。我们想将邮票贴进二进制矩阵中&#xff0c;且满足以下 限制 和 要求 &#xff1a; 覆盖…

最快的排序算法TimSort还能更快吗

关于TimSort排序算法&#xff0c;请看这篇&#xff1a;另一位博主的博客 本文主要讨论让TimSort更快的方法。 已经产生了许多run&#xff0c;它们的长度是&#xff1a;4 6 2 5 7 用类似于霍夫曼编码的方法&#xff0c;找出最小的两项&#xff0c;相加。这里是4 2&#xff0c…

MATLAB 最小二乘直线拟合方法二 (36)

MATLAB 最小二乘直线拟合方法二 (36) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 这里介绍另一种拟合直线点云的方法,更为简单方便,结果与前者一致,主要内容直接复制代码使用即可,原理简单看代码即可,下面是具体的实现和拟合结果展示 二、算法实现 1.代码 代…

对Spring源码的学习:基于XML文件配置的开发流程

目录 BeanFactory开发流程 ApplicationContext BeanFactory与ApplicationContext对比 基于XML方式的Bean的配置 自动装配 BeanFactory开发流程 这里的第三方指的是Spring提供的BeanFactory&#xff0c;Spring启动时会初始化BeanFactory&#xff0c;然后读取配置清单&#…

2021实战面试

1、Rem , em , px , % , vw 之间的区别 PX: px像素&#xff08;Pixel&#xff09;。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。 em: 1,子元素字体大小的em是相对于父元素字体大小 2,元素的width/height/padding/margin用em的话是相对于该元素的font-size rem:1rem是…

智能优化算法应用:基于象群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于象群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于象群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.象群算法4.实验参数设定5.算法结果6.参考文献7.MA…