自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 BFS:克隆图

BFS:克隆图问题:思路:首先建立与原图节点个数相等的新节点,然后按照原图中边的连接规则,对新图中对应节点进行连接在建立新节点的过程中用map保存新节点与原节点的映射关系首先使用BFS遍历所有节点,每遍历到一个节点,创建一个与之对应的新节点,并用map保存它们的映射关系遍历map中所有的原图节点,找到它的邻接点数组,遍历该数组,按照原连接规则将新图的对应节点相连代码:/*// Definition for a Node.class Node {public: int v

2020-05-31 20:58:10 144

原创 Floyd算法(插点法):阈值距离内邻居最少的城市

Floyd算法(插点法):阈值距离内邻居最少的城市问题:思路:此题可将每个节点到其他节点的最短路求出,最后对距离矩阵遍历得到结果,即转化为多源最短路问题,可采用Floyd算法Floyd算法的思想是DP:通过已知条件初始化距离矩阵D[n][n],其中D[i][j]表示,顶点i到顶点j的距离。n个顶点依次作为插入点,例如,k为其中一个顶点,若D[i][k] + D[k][j] < D[i][j],那说明顶点i经过顶点k再到达j,比直接到达j要近。所以更新D[i][j]:D[i][j]

2020-05-31 20:22:58 359

原创 BFS题:颜色交替的最短路径

BFS题:颜色交替的最短路径问题:思路:颜色交替的解决办法:我们每次传递时,将上一次遍历的边的颜色信息带上,在下一次遍历时,选择不同的颜色的邻接节点,节点信息在队列中的存储为(node,color),即既存储节点的编号,又存储上一次遍历边的颜色信息由于存在环和平行边,使用数组visit[x][y][color] = 1,代表从节点x到节点y的且颜色为color的边被访问过,防止重复访问。对红色和蓝色边分别使用map建立邻接表,初始放入队列的信息为(0,1)和(0,0),分别表示从起点开始,下

2020-05-31 15:57:35 329

原创 DFS题:由斜杠划分区域

DFS题:由斜杠划分区域问题:思路:将每个格子划分为3x3的小网格,对角线上填充1表示斜杠,其余地方全为0不能划分为2x2的网格,因为这样格子中的0将不能用上下左右四个方向连通划分后问题转化为求一个3N x 3N的网格上的0连通块有多少块,采用DFS求解在DFS函数中对当前节点的四个方向上的点调用DFS函数,并将它们的值赋为1在主函数中对所有点进行遍历,若该点的值为0,则找到了一个0连通块,将其赋为1,并对其调用DFS使连通块中的所有0元素都变为1代码:class Solu

2020-05-31 10:35:28 173

原创 带权并查集:Leetcode 399 除法求值

带权并查集:Leetcode 399 除法求值问题:思路:构建带权值边的并查集,对于每个方程式有两种情况:查询是否联通,若不联通,则答案为-1.0若联通,则求出其与根相除的结果,根据结果计算方程式。例如,对于题目示例:构造并查集:a->b->c,其中a->b的边的权值为2.0,b->c的边的权值为3.0以计算b/a时为例,以root结点为桥梁,计算b/a的值:首先计算b/root,这里root为c,则b/c = 3.0然后计算a/root,这里root为c,则a

2020-05-31 09:57:01 192

原创 暴力BFS or 多源最短路 or DP: Leetcode 1162 地图分析

暴力BFS or 多源最短路 or DP: Leetcode 1162 地图分析问题:思路:暴力BFS:对所有海洋坐标点进行BFS,求出它们到最近陆地的曼哈顿距离,再从中选取最大值对每个(x,y)需向四个方向进行搜索,即(x,y+1),(x,y-1),(x+1,y),(x-1,y)需记录遍历到每个坐标点时已走过的距离,因此将坐标点定义为结构体,结构体成员为坐标以及已走过的距离由于求的是到最近陆地的曼哈顿距离,因此遍历到陆地BFS函数即可返回距离,无需和经典BFS一样等到队列为空多源最短

2020-05-30 16:40:50 274

原创 DFS+回溯思想 or Hierholzer 算法:Leetcode332:重新安排行程

DFS+回溯思想 or问题:思路:DFS+回溯思想:使用map保存邻接表,由于map是基于键值自动排序的,所以解决了要输出自然排序最小的行程组合的问题map的键类型为string,而值类型不使用vector< string >而是使用map<string,int>,用int保存机票的数量,因为输入中可能出现相同的机票DFS函数的作用是找到以参数start为起点的满足条件的路径,找到返回TRUE,否则返回FALSE。向DFS函数传参count,count表示已遍历的边数,

2020-05-29 19:33:24 304

转载 欧拉图、欧拉路径、Hierholzer 算法

欧拉图、欧拉路径、Hierholzer 算法本文参考于【图论】什么是欧拉图?如何求欧拉路径?不严谨的定义对于一个连通的图G,有:欧拉路径: 一条路径,它能够不重复地遍历完所有的边。这个性质很像不重复地一笔画完所有边,所以有些涉及到欧拉路径的问题叫做一笔画问题。欧拉回路: 一条路径,它能够不重复地遍历完所有的边,并且回到起点。可以看出欧拉回路也是欧拉路径。半欧拉图: 一个图,图中存在欧拉路径。欧拉图: 一个图,图中存在欧拉回路。可以看出欧拉图也是半欧拉图。图与欧拉路径、欧拉回路的结论连通的无

2020-05-29 10:48:28 1361

原创 DP题:分隔数组以得到最大和

DP题:分隔数组以得到最大和问题:思路:dp[i] 表示划分了前 i 个数字产生的最大和。这里的 i 下标从 1 开始。转移时,考虑第 i 个数字与之前多少个数字组成一个子数组。故枚举 j 从 1 到 K,取 dp(i−j)+max∗j 的最大值。这里的 max 为区间的最大值,可以在枚举转移的时候更新。递推方程:代码:class Solution {public: int maxSumAfterPartitioning(vector<int>& A, in

2020-05-28 11:27:05 212 1

原创 反向图+拓扑排序 or 染色:Leetcode802 找到最终的安全状态

反向图+拓扑排序 or 染色:Leetcode802 找到最终的安全状态问题:思路:反向图+拓扑排序:对于一个节点 u,如果我们从 u 开始任意行走能够走到一个环里,那么 u 就不是一个安全的节点。换句话说,u 是一个安全的节点,当且仅当 u 直接相连的节点(u 的出边相连的那些节点)都是安全的节点。对于没有出度的节点,一定是最终安全的节点,而仅直接指向它的节点(出度为1,且指向没有出度的节点)也是最终安全的节点。以此类推,这样我们可以将所有的边全部反向,首先所有没有任何入度的节点都是安全的,

2020-05-27 11:06:48 220

原创 并查集题目:冗余连接

并查集题目:冗余连接问题:思路:以[1,2] [3,4] [3,2] [1,4] [1,5]为例初始状态:读取[1,2],将1的parent设为2,读取[3,4]同理读取[3,2],3所在的集合代表为4, 2所在的集合代表为2将4的parent设为2读取[1,4],1所在的集合代表为2, 4所在的集合代表也为2, 1和4属于同一集合, 1能通过路径到2, 4也能通过路径到2, 1能通过路径到4, 若再加入1到4的边,则1有两条路径到4,一定会出现环, 该条边即为要删除的边

2020-05-25 10:51:05 140

转载 并查集

并查集本文参考于傻子都能看懂的并查集入门并查集概述并查集顾名思义就是有“合并集合”和“查找集合中的元素”两种操作的数据结构。并查集不支持分割一个集合。用集合中的某个元素来代表这个集合,该元素称为集合的代表元。一个集合内的所有元素组织成以代表元为根的树形结构。对于每一个元素, parent[x]指向x在树形结构上的父亲节点。如果x是根节点,则令parent[x] = x。对于查找操作,假设需要确定x所在的的集合,也就是确定集合的代表元。可以沿着parent[x]不断在树形结构中向上移动,直到到达

2020-05-25 10:33:11 338 1

原创 拓扑排序变种题:Leetcode310最小高度树

拓扑排序变种题:Leetcode310最小高度树问题:思路:借用了BFS的思想,一次性将度为1的节点全部删除,不断进行此操作,直至只剩2个或1个节点正确性证明:无向无环图A在删除度为1的结点后得到无向无环图B。可以证明,图A所成最小高度树TreeA是由图B所成的最小高度树TreeB接上被删除结点后构成的。反证法:图B所成的树TreeB如果不是最小高度树,那么存在图B的最小高度树TreeB’,TreeB’的高度比TreeB更小。那么TreeB’接上被删除结点后高度比TreeA更小,这与Tree

2020-05-23 09:19:29 189

原创 Python的数据可视化

Python的数据可视化目录Python的数据可视化生成数据生成数据matplotlib:数学绘图库Pygal包:专注于生成适合在数字设备上显示的图表

2020-05-22 22:14:01 3661 1

原创 简单染色问题:不邻接植花

简单染色问题:不邻接植花问题:思路:对图中的节点建立邻接表,设解向量的初值均为0,即均未染色,使用容器set存储4种颜色按顺序遍历图中的所有节点,在set中去除所有该节点的邻接表中节点已用过的颜色( erase(key_value) 删除键值为key_value的值 ),将set中的第一种颜色赋给该节点处理完所有节点后,返回解向量代码:class Solution {public: vector<int> gardenNoAdj(int N, vector<ve

2020-05-19 21:43:16 187

原创 暴力模拟题:分数

暴力模拟题:分数题目:思路:应在long long表示的数据范围内解决问题,因此不应以除法进行权重计算,将计算权重的公式进行转换,左右两侧同时乘以每轮最大分数的乘积,将除法转换为乘法由于-1可为0~C中的任意数,每个值都对应一种不同的情况,遍历所有情况,用c1,c2记录每个参赛者出现一定晋级、一定淘汰的次数在遍历-1取值的过程中,计算每个参赛者的总得分,设为t,创建总得分的副本为s,对总得分的副本按降序排序,若t[i]>=s[k-1],则i一定晋级,c1[i]++;若t[i]<=s

2020-05-16 09:52:45 224

原创 简单模拟:Laptop

简单排序题:Laptop问题:思路:建立结构体数组,成员为laptop的内存和速度先对内存按降序排列,初始设ymax为排序后数组第一个元素的速度,从第二个元素开始遍历数组,若当前遍历元素的速度比ymax小,则该元素被“完虐”,计数加一若当前遍历元素的速度比ymax大,则更新ymax(以后遍历的元素速度若小于新的ymax则被“完虐”)代码:#include<algorithm>#include<iostream>using namespace std;struc

2020-05-14 16:24:44 274

原创 数学:Leetcode447:回旋镖的数量

Leetcode447:回旋镖的数量问题:思路:用哈希表记录每个点到其他点的线段长度使用unordered_map,键代表线段长度,值代表该线段长度出现的次数对于每个点,若相同的线段长度出现了2次及以上,则存在回旋镖。设相同的线段长度出现次数为n,从n=1开始,每次新增一次出现次数,回旋镖的数量增加2*(n-1),以下为证明:当n增加1时,新增的回旋镖为:在(n-1)个点中选一个,与新增的点组合,由于这两个点在元组中的位置可以互换,新增的回旋镖总数即为 2*(n-1)代码:class S

2020-05-14 10:37:44 227

原创 字典树:Leetcode 720:词典中最长的单词

Leetcode 720:词典中最长的单词问题:思路:1.排序+哈希表考虑将排序后的字符串散列到unordered_set中对于排序后的输入,依次寻找字符串的子串是否在unordered_set中,首先子串中只包含第一个字符,随后子串增加第二个字符,以此类推,直至子串包含倒数第二个字符。若这些子串全都存在,则该字符串由词典中的单词组成,若此时该字符串长度也为满足条件的单词中最大的,则可以输出答案了,因此在排序中字符串长度长的应排在前面由于题中要找出最长的单词,应改变排序策略,若两字符串长度相

2020-05-13 22:07:20 295

转载 前缀树(字典树)Trie Tree

前缀树(字典树)Trie Tree前缀树含义Trie树,即前缀树,又称单词查找树或字典树,是一种树形结构。该树典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。应用题目:给你100000个长度不超过10的单词。对于每一个单词,我们要判断他出没出现过,如果出现了,求第一次出现在第几个位置。在Trie树适用的状态下,很多情况同样可以使用hash树。但是Trie树用途更加的广泛,比如给一个字符串,要寻找有多少单词是以该字符串为前缀的问题。代码解析Tr

2020-05-13 21:24:24 425

原创 Python部分基本操作、函数与方法集合

Python部分操作、函数与方法集合操作:3**2 用两个乘号表示乘方运算# 用#标识注释 函数:str() 将非字符串值表示为字符串方法:name.title() 以首字母大写方式显示每个单词name.rstrip() 删除字符串结尾多余的空白name.lstrip() 删除字符串开头的空白name.strip() 删...

2020-05-12 11:42:36 219

原创 简单字符串处理:Leetcode 599:两个列表的最小索引总和

Leetcode 599:两个列表的最小索引总和问题:思路:使用STL中的无序关联容器unordered_map,键为字符串,对应的值为索引。将list1中的数据加入容器中,设索引和最小值的初始值为10000,对于list2中的字符串,查找容器中是否有键值相等的元素(相等的字符串),若有,计算索引和,若小于当前最小值,将最小值更新,并将已保存的全部字符串清除(找到了更好的最小索引)。若索引和与当前最小值相同,则将当前字符串保存。代码:class Solution {public: v

2020-05-11 16:35:26 173

原创 C++中的关联容器与无序关联容器

C++中的关联容器与无序关联容器目录C++中的关联容器与无序关联容器关联容器:set与multiset:map与multimap:无序关联容器:unordered_set、unordered_multiset、unordered_map、unordered_multimap:关联容器:关联容器将值与键关联在一起,并用键来查找值关联容器通常是使用某种树实现的STL提供了4中关联容器:set、multiset、map、multimap前两种在头文件< set >中定义,后两种在头文件&l

2020-05-11 16:25:43 472

转载 C++ new的用法

C++ new的用法转载于https://blog.csdn.net/weixin_41232202/article/details/96452228知识点小结:new其实就是告诉计算机开辟一段新的空间,但是和一般的声明不同的是,new开辟的空间在堆上,而一般声明的变量存放在栈上。通常来说,当在局部函数中new出一段新的空间,该段空间在局部函数调用结束后仍然能够使用,可以用来向主函数传递参数。另外需要注意的是,new的使用格式,new出来的是一段空间的首地址。所以一般需要用指针来存放这段地址。具体的代

2020-05-10 11:48:48 401

转载 C++把一个字符转换成string方法

C++把一个字符转换成string方法原网址:https://zhidao.baidu.com/question/492029810.html单个字符无法直接转换为string间接的方式有以下两种:1.先将字符写在字符数组中,再用字符数组赋值给string#include <iostream>#include <string>using namespace std;int main(){ char ch = 'x'; string s ;

2020-05-09 20:21:16 4322

转载 C++中substr的用法

C++中substr的用法转载于https://blog.csdn.net/mlm5678/article/details/90006706substr:substr有2种用法:假设:string s = “0123456789”;string sub1 = s.substr(5); //只有一个数字5表示从下标为5开始一直到结尾:sub1 = “56789”string sub2 = s.substr(5, 3); //从下标为5开始截取长度为3位:sub2 = “567”...

2020-05-08 21:39:17 2385

原创 将有序数组转化为平衡的二叉搜索树

将有序数组转化为平衡的二叉搜索树问题:思路:分治递归:若树是平衡的二叉搜索树,则根的左右子树均为平衡的二叉搜索树递归函数的功能为生成以有序数组中间元素为根的平衡二叉搜索树(参数为有序数组,返回根节点),则中间元素左侧的元素将生成根的左子树(也为平衡二叉搜索树),中间元素右侧的元素将生成根的右子树(也为平衡二叉搜索树),由于左右元素总数之差不大于1,整个树此时为平衡二叉搜索树(若数组元素...

2020-05-06 20:10:53 354

原创 修剪二叉搜索树

修剪二叉搜索树问题:思路:分治递归:递归函数的功能是使以当前节点为根的树修剪完毕且返回处理完成后的树根节点当根节点的值小于下界时,根节点以及其左子树应全部丢弃,此时返回对根节点的右孩子递归调用函数的返回值。当根节点的值大于上界时,根节点以及其右子树应全部丢弃,此时返回对根节点的左孩子递归调用函数的返回值。若根节点的值处于下界与上界之间,分别对根节点的左右子树进行递归函数调用,其返回...

2020-05-05 20:59:18 122

原创 二叉树的最近公共祖先

二叉树的最近公共祖先问题:思路:分治递归:在二叉树中寻找节点p,q:要么p或q为根节点,在这种情况下,根节点即为最近公共祖先。要么p,q 分布在左子树或右子树中。若p,q分别分布在左右子树,根节点即为最近公共祖先,若p,q都处于左子树或右子树中,则处理对象变为根的左子树或右子树,对左子树或右子树递归求解。递归函数的功能为寻找节点p,q的最近公共祖先,若根节点即为p或q,直接返回根节点...

2020-05-04 17:17:02 140

原创 二叉树之最长同值路径

二叉树之最长同值路径问题:思路:后序遍历 + 递归:定义变量ans保存最长同值路径长度,初始为0递归函数的功能为计算从p节点开始,向下出发最长的同值路径长度,递归函数的参数包含引用变量参数ans先对p节点的左右子树根调用递归函数,得到从左右子树根出发的最长同值路径长度分别为left,right若左右子树根的值与p节点的值相同,对应的最长同值路径长度 left 或 right 需加...

2020-05-04 11:22:07 304

原创 Leetcode 437: 二叉树路径总和3(双递归)

Leetcode 437: 二叉树路径总和3问题:此题的测试用例表示单节点也算作一条路径,但是在题中并没有说明,这显然是不符合路径定义的

2020-05-04 08:57:43 281

原创 C语言基础题:求一个数的所有因子和

C语言基础题:求一个数的所有因子和问题:七夕节那天,hx073269来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:“你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!” 人们纷纷来到告示前,都想知道谁才是自己的另一半.告示如下: 值此七夕佳节来临之际,为感谢广大群众对我hx073269的热爱,特此将大家的另一半的寻找方法公布如下:将你的编号(数字王国的每一个人都有自己的...

2020-05-02 17:16:35 12851 1

原创 二叉树的坡度

二叉树的坡度

2020-05-02 08:19:21 178

原创 二叉树的所有路径

二叉树的所有路径

2020-05-01 15:59:04 1059

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除