![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法和数据结构
主要包含数据结构算法相关内容,还有LeetCode部分题目题解
LMH_0797
这个作者很懒,什么都没留下…
展开
-
刷题笔记:并查集(LeetCode1319)
并查集定义 并查集(Union合并,Find查找,Set集合)是一种维护集合的数据结构,并查集支持一下两个操作: 合并:合并两个集合 查找:判断两个原色是否在用一个集合(寻找根结点) 并查集通过一个一维数组 int father[N] 实现。其中father[i] 表示节点 i 的父结点。如果,father[i] == i ,则说明结点 i 为根结点;对于同一个结合,只有一个根结点,将其作为一个集合的标识。 以上图为例,图中分为了两个集合,(1,2,5)为一个集合,(3,4)为一另一个结合,有两个根节原创 2021-01-23 18:00:25 · 139 阅读 · 0 评论 -
LeetCode45.跳跃游戏 II&I
题目描述 题目连接:https://leetcode-cn.com/problems/jump-game-ii/ 解决策略:使用贪心的思想,我们从后往前进行跳跃,选择离目标位置最远的一个可达的点,往前递推,直到到达起始点。 代码 class Solution { public: int jump(vector<int>& nums) { int i=nums.size()-1,_max,num=0; while(i!=0){ //到达起点就终止原创 2021-04-10 12:11:08 · 58 阅读 · 0 评论 -
刷题笔记:并查集(续,LeetCode-959)
题目:由斜杠划分区域 原题链接:https://leetcode-cn.com/problems/regions-cut-by-slashes/ 解析 题目需要求解连通块的个数,我们可以通过并查集进行求解,将联通的区域合并成同一个集合,最后求解集合的个数。 观察下图,我们把单元格分为4个三角形,并进行编号。 对单元格内的合并: 如果是空格‘ ’,我们将(0,1,2,3)进行合并 如果是斜杠‘/’,我们将(0,3),(1,2)进行合并 如果是反斜杠‘\’,我们将(0,1),(2,3)进行合并 对相邻单元原创 2021-01-25 18:07:13 · 85 阅读 · 0 评论 -
二叉树的不同创建方式及其遍历,以及二叉树形状的绘制
二叉树的创建 不同的输入方式有不同的创建方式,这里给根据两种不同的二叉树输入方式编写出两种不同的创建代码。 第一种:根据二叉树的先序遍历创建二叉树 //样例输入,'#'表示结束 //ABC##DE#G##F### char node[400][400]; //结点的定义 typedef struct BinTNode{ char data;//数据域 struct BinTNode *lchild; struct BinTNode *rchild; int depth; int flag;原创 2021-04-02 20:43:41 · 179 阅读 · 0 评论 -
C++实现string转数字,数字转string
string转成数字 #include<bits/stdc++.h> //#include<ostream> //#include<cstdio> using namespace std; string convertTostring(double x){ ostringstream o; if(o<<x) return o.str(); return "error"; } 数字转成string #include<bits/stdc++.h>原创 2021-08-10 09:19:19 · 200 阅读 · 0 评论 -
刷题笔记:LeetCode-989(大数加法)
题目 该题为简单题,以下为原题连接。 https://leetcode-cn.com/problems/add-to-array-form-of-integer/ 个人解析 此题其实就是高精度加法的变形。根据之前的学习,个人总结出以下两个大数的加法模板。 #include<bits/stdc++.h> using namespace std; int main() { int a,b; cin>>a>>b; vector<int> ans; int s原创 2021-01-22 22:45:14 · 180 阅读 · 0 评论 -
刷题笔记:LeetCode-628
题目 给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。 https://leetcode-cn.com/problems/maximum-product-of-three-numbers/ 个人解析 这是笔者的第一篇博客,题目简答,略显粗糙。 笔者看到这题时,头脑简单,直接使用sort排序,之后返回最大的三个数的乘积,这明显是错误的,没有考虑到负负得正,属实丢脸。 稍加思考之后,我分为两种情况来进行讨论。先将整个数组进行排序,数据均>=0,则直接返回最大的三个整数之积原创 2021-01-20 23:37:16 · 124 阅读 · 0 评论 -
刷题笔记:最小生成树,欧拉回路,以及树的判断
一、最小生成树 算法 最小生成树(Minimum Spanning Tree,MST)是在一个给定的无向图G(V,E)中求一棵树T,使得这棵树拥有图G中的所有顶点,且所有边都是来自图G中的边,并且满足整棵树的边权之和最小。 求解最小生成树一般有两种算法,即prim算法与kruskal算法。这两个算法都是采用了贪心法的思想,只是贪心的策略不太一样。 prim算法 其基本思想是对图G(V,E)设置集合S,存放已被访问的顶点,然后每次从集合V-S中选择与集合S的最短距离最小的一个顶点(记为u),访问并加入集合S。原创 2021-02-25 14:36:17 · 946 阅读 · 0 评论 -
根据二叉树的中序和后序(或者先序)构建二叉树
原理 对于二叉树T,我们可以递归定义它的先序遍历、中序遍历和后序遍历。 PreOrder(T)=T的根结点+PreOrder(T的左子树)+PreOrder(T的右子树) InOrder(T)=InOrder(T的左子树)+T的根结点+InOrder(T的右子树) PostOrder(T)=PostOrder(T的左子树)+T的根结点+PostOrder(T的右子树) 如果我们知道一棵二叉树的中序遍历以及后序遍历(或者先序遍历),我们可以确定一棵唯一的二叉树。 先根据后序遍历(或者先序遍历)我们可以确定二原创 2021-04-02 22:49:49 · 395 阅读 · 0 评论 -
刷题笔记:最短路径(Dijkstra算法)
算法 最短路径问题是:给定图G(V,E),求一条从起点到终点的路径,使得这条路径上经过的所有边的边权之和最小。 对任意给出的图G(V,E)和起点S、终点T,如何求从S到T的最短路径。解决最短路径问题的常用算法有Dijkstra算法、Bellman-Ford算法,SPFA算法和Floyd算法。这里主要介绍Dijkstra算法。 Dijkstra算法 Dijkstra算法用来解决单源最短路径问题,即给定图G(V,E)和起点S,通过算法得到S到达其他每个顶点的最短距离,但是不能处理有负权边的情况。 Dijkstr原创 2021-02-25 14:12:56 · 1141 阅读 · 0 评论