![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 59
张李浩
这个作者很懒,什么都没留下…
展开
-
双链表的数组表示和基本操作
基本操作:转载自:双链表(王道)_输出者的博客-CSDN博客#include<stdio.h>#include<stdlib.h> typedef struct dnode{int data;struct dnode *prior;struct dnode *next;}dnode,*dlinklist; int main(){ bool slist_initlist(dlinklist &l);//初始化 bool slist_he转载 2021-09-14 22:42:46 · 115 阅读 · 0 评论 -
离散化(暂时学这么多)
思想:模板vector<int> alls; // 存储所有待离散化的值sort(alls.begin(), alls.end()); // 将所有值排序alls.erase(unique(alls.begin(), alls.end()), alls.end()); // 去掉重复元素// 二分求出x对应的离散化的值int find(int x) // 找到第一个大于等于x的位置{ int l = 0, r = alls.size() - 1; ..原创 2021-09-04 12:41:20 · 58 阅读 · 0 评论 -
位运算、lowbit()算法
讲解视频:求n的二进制表示lowbit()运算简单应用:地址:代码:讲解视频:https://www.acwing.com/video/14/求n的二进制表示//已知10的二进制表示是1010#include <iostream>#include <string.h>int main(){int n=10;for(int k=3;k>=0;k--) cout<<(n>>k&&1...原创 2021-09-04 09:34:14 · 103 阅读 · 0 评论 -
洛谷P1443马的遍历--------bfs
本题与走迷宫问题很像可参考模板:https://blog.csdn.net/qq_52934831/article/details/119952424?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163055948616780357263971%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=1630559.原创 2021-09-02 13:14:09 · 86 阅读 · 0 评论 -
Kruskal算法求最小生成树(合并集合)
地址:https://www.acwing.com/problem/content/861/用到的合并集合知识:https://blog.csdn.net/qq_52934831/article/details/120032035?spm=1001.2014.3001.5501描述:思想:代码:#include <iostream>//sort 函数要用到#include <algorithm>using namespace std;in原创 2021-09-01 21:59:41 · 4653 阅读 · 1 评论 -
合并集合(并查集)+求集合的个数
只实现联通功能地址:https://www.acwing.com/problem/content/838/描述:思想://普通版的find()函数,返回祖宗节点int find(int x) { if (x == p[x]) //如果x是祖先,则返回 return x; else return find(p[x]); //如果x不是祖先,那么就去问x的爸爸它的爸爸是不是祖宗节点}//路径压缩的find函数,...原创 2021-09-01 14:51:03 · 432 阅读 · 0 评论 -
prim算法求最小生成树------Acwing858
地址:描述:思想:令我困惑的点:for(int j=1;j<n;j++){if(dist[j]>g[t][j]) dist[j]=g[t][j];}这句话的涵义是为了更新生成树外的点到生成树的距离按道理来说dist[j]应该与与dijkstra算法的区别:dijkstra算法:if(dist[j]>dist[t]+g[t][j]) dist[j]=dist[t]+g[t][j];prim算法:if(dist[j]>g[t][..原创 2021-08-31 20:56:13 · 328 阅读 · 0 评论 -
邻接矩阵(考研图论)
//邻接矩阵#include<stdio.h>#include<stdlib.h>#define Status int#define OVERFLOW -2#define OK 1#define ERROR -1//邻阶矩阵#define MaxInt 32767#define MVNum 100typedef char VerTexType;//顶点的数据类型typedef int ArcType;//边的权值类型typedef struct{ Ver.原创 2021-08-31 20:25:33 · 236 阅读 · 0 评论 -
SPFA算法求最短路和判断负环(支持负权边)
地址:https://www.acwing.com/problem/content/853/描述:思路:1、什么是spfa算法?SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环。SPFA一般情况复杂度是O(m)O(m) 最坏情况下复杂度和朴素 Bellman-Ford 相同,为O(nm)O(nm)。bellman-ford算法操作如下:for n次 for 所有边 a,b,w (松弛操作) dis.转载 2021-08-30 19:26:26 · 309 阅读 · 0 评论 -
Dijkstra算法求最短路问题
地址:https://www.acwing.com/problem/content/851/描述:m是n^2级别的话就是稠密图,m是n级别的就是稀疏图稠密图:用堆优化(稀疏图):思路:初始时, S只包含起点s;U包含除s之外的其他顶点,且U中顶点的距离为“起点s到该顶点的距离”【例如:U中顶点v的距离为(s, v)的长度,然后s和v不相邻,则v的距离为∞】。 从U中选出“距离最短的顶点k”,并将顶点k加入到S中;同时,从U中移除顶点k。 更新U中各个顶点到起点s的距.原创 2021-08-30 11:09:54 · 431 阅读 · 0 评论 -
Acwing848有向图的拓扑序列---------bfs
地址:https://www.acwing.com/problem/content/850/描述:思路:用队列来执行 ,初始化讲所有入度为0的顶点入队。主要由以下两步循环执行,直到不存在入度为 0 的顶点为止选择一个入度为 0 的顶点,并将它输出; 删除图中从顶点连出的所有边。循环结束,若输出的顶点数不等于图中的顶点数+1,则表示该图存在回路,即无法拓扑排序,否则,输出的就是拓扑序列 (不唯一)代码:#include <cstring>#.原创 2021-08-29 19:09:38 · 137 阅读 · 0 评论 -
Acwing847图中点的层次-------bfs
地址:https://www.acwing.com/problem/content/849/描述:思路:代码:#include <cstring>#include <queue>#include <iostream>using namespace std;int n,m;//n个点和m条边const int N=1e5+10;int d[N];int h[N],e[N],ne[N],idx;queue<int> q..原创 2021-08-29 15:01:37 · 112 阅读 · 0 评论 -
Acwing846树的重心---------dfs(邻接表)
地址:https://www.acwing.com/problem/content/description/848/描述:思路:本题的本质是树的dfs, 每次dfs可以确定以u为重心的最大连通块的节点数,并且更新一下ans。也就是说,dfs并不直接返回答案,而是在每次更新中迭代一次答案。这样的套路会经常用到,在 树的dfs 题目中总结以u为根的子树个数可由dfs(j)不断递归得到特别注意:由于本题给出的图是无向图,假如首次遍历,不论取那个节点,它...原创 2021-08-29 10:55:50 · 216 阅读 · 1 评论 -
图的DFS和BFS-------(基于邻接表)以及拓扑排序
转载:https://blog.csdn.net/qq_39328436/article/details/106956963?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163012979216780271520735%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163012979216780271520原创 2021-08-28 20:57:16 · 714 阅读 · 0 评论 -
Acwing845(8数码)--------bfs
地址:https://www.acwing.com/problem/content/847/描述:输出答案为:19思路:和之前的找最短出路思路差不多代码:#include<iostream>#include<queue>#include<unordered_map>using namespace std;//保存字符串=>代表了当前棋盘的状态queue<string> q;//保存从起点到当前状态需...原创 2021-08-27 19:58:29 · 100 阅读 · 0 评论 -
Acwing844走迷宫(最短路问题)----------(bfs)
地址:https://www.acwing.com/problem/content/846/描述:代码:根据bfs的原理,从起点第一次走到终点走的一定是最短路径#include <iostream>#include <cstring>//因为bfs需要借助queue,所以加上头文件#include <queue>using namespace std;int n,m;const int N=1e2;int g[N][N];//存放迷原创 2021-08-27 14:27:16 · 152 阅读 · 0 评论 -
字符串的前缀哈希法
转载:https://blog.csdn.net/sinat_40471574/article/details/93517539?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162997559616780274130995%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=16299755961678027413转载 2021-08-26 19:02:36 · 780 阅读 · 0 评论 -
Acwing843、Leetcode051(n-皇后问题)--------DFS(全排列)
地址:https://www.acwing.com/problem/content/845/描述:思路:整体的思路:我们要枚举每一行的皇后应该放在第几列上其实和全排列的思想非常类似代码:回溯(剪枝)思路:#include <iostream>using namespace std;int n;//1<=n<=9const int N=10;char qi[N][N];//分别记录的是该位置的列,正对角线,斜对角线上是否放过皇.原创 2021-08-26 11:08:51 · 172 阅读 · 0 评论 -
Leetcode173(中序遍历二叉搜索迭代器)(迭代法)--------栈
中序遍历:https://blog.csdn.net/qq_52934831/article/details/119121225?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162968562516780269832560%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=1629685625167802698原创 2021-08-23 11:08:07 · 144 阅读 · 0 评论 -
Leetcode124(二叉树的最大路径之和)-------递归
打基础:https://blog.csdn.net/qq_52934831/article/details/119858965https://blog.csdn.net/qq_52934831/article/details/119858866地址:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/描述:思路:考虑实现一个简化的函数 dfs(TreeNode*root),该函数计算二叉树中的一个节点的.原创 2021-08-23 09:33:15 · 83 阅读 · 0 评论 -
Leetcode534(二叉树的直径)---------递归
动态图见:https://leetcode-cn.com/problems/diameter-of-binary-tree/solution/shi-pin-jie-shi-di-gui-dai-ma-de-yun-xing-guo-chen/地址:https://leetcode-cn.com/problems/diameter-of-binary-tree/描述:思路:最大直径是左子树和右子树的最大深度之和,但是万一最大直径没有经过根节点呢?所以说对于树中的每一个结点,都要.原创 2021-08-22 22:47:20 · 86 阅读 · 0 评论 -
Leetcode104二叉树的最大深度------(进阶:二叉树的直径)-----递归解法
进阶:通过求二叉树的最高深度,求二叉树的直径,详情题解:https://blog.csdn.net/qq_52934831/article/details/119858965地址:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/描述:思路:找出终止条件:当前节点为空找出返回值:节点为空时说明高度为 0,所以返回 0;节点不为空时则分别求左右子树的高度的最大值,同时加1表示当前节点的高度,返回该数值.原创 2021-08-22 22:47:39 · 72 阅读 · 0 评论 -
Leetcode102二叉树的层序遍历----队列运用
地址:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/submissions/描述:代码:class Solution {public: //!!!整体思路在操作上一层元素时,把下一层元素加入队列 vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>&.原创 2021-08-20 20:01:17 · 63 阅读 · 0 评论 -
Leetcode105根据前序和中序遍历构造二叉树----递归思想
地址:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/描述:思路:代码:class Solution {public: //根据中序遍历数组建立哈希表,方便根据前序遍历的值找到中序遍历中位置 unordered_map<int,int> in; TreeNode* buildTree(vector<.原创 2021-08-20 12:48:52 · 78 阅读 · 0 评论 -
Leetcode树专题
Leetcode098(验证二叉搜索树)-------中序遍历地址:https://leetcode-cn.com/problems/validate-binary-search-tree/描述:代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(原创 2021-08-19 21:38:58 · 121 阅读 · 0 评论 -
Leetcode141、142(环形链表)--------快慢指针判断有没有环
地址:https://leetcode-cn.com/problems/linked-list-cycle/https://leetcode-cn.com/problems/linked-list-cycle-ii/描述:思路:代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int原创 2021-08-15 14:58:29 · 76 阅读 · 0 评论 -
Leetcode106(相交链表)--------我走过你来时的路&&注意不要陷入死循环
地址:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/描述:思路:特别注意:代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {}..原创 2021-08-15 10:06:17 · 72 阅读 · 0 评论 -
Leetcode092(规定左右边界翻转区域内的链表)------迭代法
类似的翻转整段链表,这里要用到其中的思路:https://blog.csdn.net/qq_52934831/article/details/119703230地址:https://leetcode-cn.com/problems/reverse-linked-list-ii/描述:思路:代码:/** * Definition for singly-linked list. * struct ListNode { * int val; ...原创 2021-08-14 21:51:58 · 74 阅读 · 0 评论 -
Leetcode206(翻转整段链表)--------迭代法运用
地址:https://leetcode-cn.com/problems/reverse-linked-list/描述:思路:想要翻转整条链表其实就是从头结点开始两两将链表的指向对调代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {.原创 2021-08-14 16:58:29 · 72 阅读 · 0 评论 -
Leetcode链表专题
目录Leetcode019删除链表的倒数第N个数--------快慢指针:地址:描述:(进阶扫描一次实现)题解:Leetcode083删除排序链表中的重复元素描述:代码:Leetcode061(旋转链表)--------快慢指针描述:题解:Leetcode024两两交换链表中的节点-------(for循环的妙用&&链表接连的顺序)描述:题解:Leetcode019删除链表的倒数第N个数--------快慢指针:地址:...原创 2021-08-13 22:17:01 · 168 阅读 · 0 评论 -
Leetcode069(找平方根)---------二分法基础运用(小心溢出)
地址:题解(自己整理的二分法做法):描述:主要思路:注意点:代码:地址:https://leetcode-cn.com/problems/sqrtx/题解(自己整理的二分法做法):https://mp.csdn.net/mp_blog/creation/editor/119446002描述:主要思路:注意点:这里如果写成mid*mid<=x,会面临当mid过大时导致溢出的情况,比如:所以我们为了避免溢出,要写成mid&...原创 2021-08-12 09:42:32 · 145 阅读 · 0 评论 -
Leetcode078、90(子集问题)———回溯算法(判断添加结果条件)
地址:Leetcode078:Leetcode090:描述:题解:主要思路:代码(一):注意点:代码(二):地址:Leetcode078:https://leetcode-cn.com/problems/subsets/Leetcode090:https://leetcode-cn.com/problems/subsets-ii/描述:题解:https://leetcode-cn.com/problems/subsets/sol...原创 2021-08-11 16:49:26 · 108 阅读 · 0 评论 -
Leetcode047全排列(可能含重复元素)-----------回溯法加剪枝
地址:描述:题解:不含重复元素的46题——题解地址():主要思路:代码:地址:https://leetcode-cn.com/problems/permutations-ii/描述:题解:https://leetcode-cn.com/problems/permutations-ii/solution/dai-ma-sui-xiang-lu-dai-ni-xue-tou-hui-s-ki1h/不含重复元素的46题——题解地址():https://..原创 2021-08-10 20:55:48 · 222 阅读 · 0 评论 -
Leetcode046全排列(不含重复元素)-----------DFS回溯法简单应用
地址:描述:题解(这个大佬讲的很仔细):解题心路历程:这是他的代码易于我们去观察:不会debug的小白自己硬写出来的步骤:在理解了回溯算法后我自己尝试写了一次代码:注意点:解释:地址:https://leetcode-cn.com/problems/permutations/描述:题解(这个大佬讲的很仔细):https://leetcode-cn.com/problems/permutations/solution/hui-su-suan-fa-p...原创 2021-08-10 15:36:59 · 180 阅读 · 0 评论 -
二分法 Leetcode033、81、153(搜索旋转排序数组)---81题遇到出现重复元素该怎么处理?
题目:描述:题解:解题思路:怎么套用二分查找的模板呢?【比较的过程步骤如下】First:Second:Third:六种情况的分析:n[mid] >= left,针对mid左边界有序当【tar >= n[left]】,会有两种情况!!!对于这种情况我专门进行了一次测试:当【tar < n[left]】,只有一种情况n[mid] < left,针对mid右边界有序当【tar <= n[right]】,有两种情况..转载 2021-08-06 17:29:21 · 92 阅读 · 0 评论 -
二分查找法---------五大常用算法
大佬解析:核心思想:图片说明:优缺点:使用条件:代码:递归法:非递归法:时间复杂度空间复杂度:大佬解析:https://blog.csdn.net/maoyuanming0806/article/details/78176957?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162821140416780271585331%2522%252C%2522scm%2522%253A%25222014..原创 2021-08-06 10:14:53 · 491 阅读 · 0 评论 -
五大常用经典算法---------分治算法
地址(整理的挺好的):https://blog.csdn.net/sanmi8276/article/details/114688020?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162816288016780357228468%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162816288016780357228468&a转载 2021-08-05 22:40:27 · 60 阅读 · 0 评论 -
数组模拟单链表--------头、尾插法建立单链表
头插法:#include<iostream>using namespace std;typedef struct Node {//创建进程控制块 int data; struct Node *next;//指向下一个结点的指针}*LinkList;LinkList head, tail;//头插法创建单链表void head_create(){ head = new Node(); head->next = NULL; int n = 0; cout <原创 2021-08-02 14:51:13 · 518 阅读 · 0 评论 -
经典四大排序(动图实现)
这个大佬整理的很仔细:https://blog.csdn.net/m0_37741420/article/details/106981276?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162777450716780262565601%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162777450716780262565601原创 2021-08-01 10:24:20 · 11165 阅读 · 2 评论 -
DFS回溯算法及例题
题目:题解:一:回溯算法解释的比较清楚二:代码用了hashmap和我的思路差不多解题历程:自己写的(部分实现)错误点总结:回溯算法地址:1概念:2 回溯函数的组成3 简单的回溯函数3.1 问题描述3.1.1 问题分析3.1.2 完整代码上面举了一个数字全排列的例子,再让我们来看leetcode017这题具体思路:代码(解法一):注意点:代码(解法二):利用了hashmap题目:https://leetcode-cn.com/原创 2021-07-30 22:46:43 · 578 阅读 · 0 评论