代码随想录(一刷完结!!!)Day43-图论:力扣第1971e、684m题

1971e. 寻找图中是否存在路径

题目链接
代码随想录文章讲解链接

方法一:并查集

用时:10m6s

思路
  • 时间复杂度: O ( n log ⁡ n ) O(n\log{n}) O(nlogn)
  • 空间复杂度: O ( n ) O(n) O(n)
C++代码
class Solution {
private:vector<int> father;void init(int n) {// 初始化并查集,每个节点的根都是自己father = vector<int>(n);for (int i = 0; i < n; ++i) father[i] = i;}int find(int a) {// 查找根,并且压缩路径return a == father[a] ? a : father[a] = find(father[a]);}bool isSame(int a, int b) {// 判断两个节点是否在同一个集合中,即两个节点是否是同一个根return find(a) == find(b);}void join(int a, int b) {// 将a节点和b节点合并到同一个集合中,即让b的根指向a的根a = find(a);b = find(b);if (a != b) father[b] = a;}public:bool validPath(int n, vector<vector<int>>& edges, int source, int destination) {init(n);  // 初始化并查集for (int i = 0; i < edges.size(); ++i) join(edges[i][0], edges[i][1]);  // 根据边更新并查集return isSame(source, destination);  // 判断两个节点是否在同一个集合}
};

方法二:BFS

用时:11m20s

思路
  • 时间复杂度: O ( n + m ) O(n+m) O(n+m)
  • 空间复杂度: O ( n + m ) O(n+m) O(n+m)
C++代码
class Solution {
public:bool validPath(int n, vector<vector<int>>& edges, int source, int destination) {// 构建邻接矩阵vector<vector<int>> adj(n);vector<bool> visited(n, false);for (int i = 0; i < edges.size(); ++i) {int node1 = edges[i][0];int node2 = edges[i][1];adj[node1].emplace_back(node2);adj[node2].emplace_back(node1);}// BFSqueue<int> que;que.push(source);visited[source] = true;while (!que.empty()) {int cur = que.front();if (cur == destination) return true;que.pop();for (int i = 0; i < adj[cur].size(); ++i) {if (!visited[adj[cur][i]]) {visited[adj[cur][i]] = true;que.push(adj[cur][i]);}}}return false;}
};

方法三:DFS

用时:27m50s

思路

先构建邻接表,记录每个节点可以通往的节点;然后从source节点开始DFS,dfs递归函数的返回值不是void,是bool,当dfs过程中到达了destination,则返回true,注意不能直接递归内部不能直接返回dfs(…),因为即使一条dfs路径无法到达destination,也可能有其他路径。

  • 时间复杂度: O ( n + m ) O(n+m) O(n+m)
  • 空间复杂度: O ( n + m ) O(n+m) O(n+m)
C++代码
class Solution {
private:bool dfs(vector<vector<int>>& adj, vector<bool>& visited, int source, int destination) {if (source == destination) return true;visited[source] = true;for (int i = 0; i < adj[source].size(); ++i) {if (!visited[adj[source][i]] && dfs(adj, visited, adj[source][i], destination)) return true;}return false;}public:bool validPath(int n, vector<vector<int>>& edges, int source, int destination) {vector<vector<int>> adj(n);vector<bool> visited(n, false);for (int i = 0; i < edges.size(); ++i) {int node1 = edges[i][0];int node2 = edges[i][1];adj[node1].emplace_back(node2);adj[node2].emplace_back(node1);}return dfs(adj, visited, source, destination);}
};

看完讲解的思考

无。

代码实现遇到的问题

无。


684m. 冗余连接

题目链接
代码随想录文章讲解链接

方法一:并查集

用时:25m21s

思路
  • 时间复杂度: O ( n log ⁡ n ) O(n\log{n}) O(nlogn)
  • 空间复杂度: O ( n ) O(n) O(n)
C++代码
class Solution {
private:vector<int> father;void init(int n) {father = vector<int>(n + 1);for (int i = 1; i < n + 1; ++i) father[i] = i;}int find(int a) {return a == father[a] ? a : father[a] = find(father[a]);}bool isSame(int a, int b) {return find(a) == find(b);}void join(int a, int b) {a = find(a);b = find(b);if (a != b) father[b] = a;}public:vector<int> findRedundantConnection(vector<vector<int>>& edges) {init(edges.size());for (auto& edge : edges) {if (isSame(edge[0], edge[1])) return edge;join(edge[0], edge[1]);}return {0, 0};}
};

看完讲解的思考

无。

代码实现遇到的问题

无。


最后的碎碎念

一刷代码随想录完结撒花~!!!
虽然其实最后图论部分偷懒了,hard题都没做,主要是因为最近要开始找实习了,时间比较赶,hard题就先不做了,我找个日常实习而已,应该不会出图论的hard题目…吧…
所以图论只是把基础内容过了一下,接下来还是先赶紧去捡起前面的题型,复习一下。

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

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

相关文章

奇怪,为什么ArrayList初始化容量大小为10?

看ArrayList源码时&#xff0c;无意中看到ArrayList的初始化容量大小为10&#xff0c;这就奇怪了&#xff01;我们都知道ArrayList和HashMap底层都是基于数组的&#xff0c;但为什么ArrayList不像用HashMap那样用16作为初始容量大小&#xff0c;而是采用10呢&#xff1f; 为什…

C++笔记之lambda捕获列表中的‘this‘指针

C笔记之lambda捕获列表中的’this’指针 code review! 捕获this指针的lambda表达式在C中有多种应用场景。以下是一些示例&#xff1a; 异步编程&#xff1a;当您需要在异步操作中访问类的成员变量或成员函数时&#xff0c;可以使用捕获this指针的lambda表达式。例如&#xf…

spring Aop @Around @Before @After的区别说明

Before是在所拦截方法执行之前执行一段逻辑。 After 是在所拦截方法执行之后执行一段逻辑。 Around是可以同时在所拦截方法的前后执行一段逻辑。 spring只支持方法连接点 Aspect Component public class LogIntercept {Pointcut ( "execution(* com.ncx.controller.*.*(.…

STM32H750之FreeRTOS学习--------(四)中断管理

四、FreeRTOS中断管理 中断的概念不再过多叙述&#xff0c;学习过逻辑的都知道 中断的执行过程 中断请求 外设产生中断请求&#xff08;GPIO外部中断、定时器中断等&#xff09;响应中断 CPU停止执行当前程序&#xff0c;转而去执行中断处理程序&#xff08;ISR&#xff09;…

linux centos7安装colmap

centos安装colmap 一、安装依赖 sudo yum install \gflags-devel \glog-devel \glew-devel \atlas \atlas-devel \lapack-devel \blas-devel \flann-devel \lz4-devel \sqlite-devel \metis-devel \qt5-qtbase-devel二、编译安装colmap git clone https://github.com/colmap/…

WPF的TextBox控件中启用拖放操作

首先&#xff0c;在XAML中为TextBox添加以下属性&#xff1a;AllowDrop"True"。这将启用TextBox的拖放功能。 public MainWindow() {InitializeComponent();textBox.AllowDrop true;textBox.PreviewDragOver TextBox_PreviewDragOver;textBox.PreviewDrop TextBo…

nvm 下载 nodejs 速度慢问题解决

1、找到 nvm 的下载目录&#xff0c;在目录下找到 settings.txt 文件 2、打开 settings.txt 文件 &#xff0c;添加以下代码&#xff1a; node_mirror: https://npm.taobao.org/mirrors/node/ npm_mirror: https://npm.taobao.org/mirrors/npm/添加完成后再去下载即可。

Webpack的入口(entry)和出口(output)

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Windows 下编译 TensorFlow 2.9.1 CC库

参考 Intel 的 tensorflow 编译指导&#xff0c;不过项目还是可以用 TF原本的&#xff0c;不是一定要选择Intel 的TF版本。 安装 MSVC 2019 安装 Intel OneDNN OneMKL 似乎也可以不安装 ( & ) https://www.intel.cn/content/www/cn/zh/developer/articles/tool/one…

6 MySQL常用的数据类型

1、整型 -- TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT 分别使用 8, 16, 24, 32, 64 位存储空间&#xff0c;一般情况下越小的列越好;2、浮点数 -- 1.FLOAT 和 DOUBLE 为浮点类型&#xff0c;DECIMAL 为高精度小数类型。CPU 原生支持浮点运算&#xff0c;但是不支持 DECIMAl…

Redis主从复制基础概念

Redis主从复制&#xff1a;提高数据可用性和性能的策略 一、概述 Redis主从复制是一种常用的高可用性策略&#xff0c;通过将数据从一个Redis服务器复制到另一个或多个Redis服务器上&#xff0c;以提高数据的可用性和读取性能。当主服务器出现故障时&#xff0c;可以快速地切…

VUE组件间通信的七种方式

目录 1、 props / $emit &#xff08;1&#xff09;父组件向子组件传值&#xff08;props的用法&#xff09; &#xff08;2&#xff09;子组件向父组件传递数据&#xff08;$emit的用法&#xff09; 2、ref / $refs 用法&#xff1a; 3、eventBus事件总线&#xff08;$e…

Technology strategy Pattern 学习笔记1-Context: Architecture and Strategy

Context: Architecture and Strategy 1 Architect and Strategist 1.1 three primary concerns of the architect 1.1.1 Contain entropy(熵-混乱程度&#xff0c;不确定性&#xff0c;惊奇程度&#xff0c;不可预测性&#xff0c;信息量等等&#xff09; The architect wh…

Python|Pyppeteer获取威科先行文章链接(21)

前言 本文是该专栏的第21篇,结合优质项目案例持续分享Pyppeteer的干货知识,记得关注。 本文以“威科先行”的信息库为例,笔者将详细介绍使用pyppeteer“自动滑动页面并翻页”获取威科先行的文章链接。如果对pyppeteer的使用以及知识点不太熟悉的同学,可往前查看本专栏前面…

UML 2.0包括14种图

UML 2.0包括14种图&#xff0c;分别如下&#xff1a; &#xff08;1&#xff09;类图&#xff08;class diagram&#xff09;。类图描述一组类、接口、协作和它们之间的关系。类图给出了系统的静态设计视图&#xff0c;活动类的类图给出了系统的静态进程视图。 &#xff08;2…

Modelsim 使用教程(5)——Analyzing Waveforms

一、概述 Wave窗口允许我们以HDL波形和数据的形式查看仿真结果。Wave窗口被划分为多个窗格。通过单击并在任意两个窗格之间拖动该条&#xff0c;可以调整路径名窗格、值窗格和波形窗格的大小。 二、加载一个设计&#xff08;Loading a Design&#xff09; 1、打开modelsim 2、…

SQL左连接实战案例

要求&#xff1a;用表df1和表df2的数据&#xff0c;得到df3 一、创建表 CREATE TABLE df1 (姓名 varchar(255) DEFAULT NULL,年龄 int DEFAULT NULL,部门 varchar(255) DEFAULT NULL,id int DEFAULT NULL );CREATE TABLE df2 (部门 varchar(255) DEFAULT NULL,年龄 int DEFAU…

C++ Qt QLineEdit如何响应回车事件

在Qt开发中,回车键的处理很常见,本篇博客介绍在QLineEdit里回车键的处理方法,例如下面的界面: QLineEdit回车键的处理有方式,一是链接returnPressed信号,二是用事件过滤。下面分别介绍这两种方式。 一、returnPressed信号 可以查看QLineEdit的头文件声明,有如下信号:…

elementUI 轮播图 ----Carousel 走马灯笔记

在有限空间内&#xff0c;循环播放同一类型的图片、文字等内容 用法&#xff1a; <el-carousel :interval"5000" arrow"always"><el-carousel-item v-for"item in 4" :key"item"><h3>{{ item }}</h3></e…

洗地机哪个品牌好?家用洗地机选购攻略

随着家用洗地机的普及和市场的广泛认可&#xff0c;进入洗地机行业的制造商也越来越多。在面对众多洗地机品牌时&#xff0c;消费者常常感到困惑&#xff0c;不知道如何选择。面对众多选择&#xff0c;选择有良好保障的知名洗地机品牌是明智之举。知名品牌在质量、售后服务等方…