数据结构与算法
BOWWOB
社畜
展开
-
python 1行代码解决算法 回文数 问题(多一行都不行)
class Solution: def isPalindrome(self, x: int) -> bool: #int转换成字符串,反转字符串 进行比较 OK return str(x)==str(x)[::-1]原创 2022-04-18 09:15:06 · 580 阅读 · 0 评论 -
数据结构:排序算法复习 日常打卡
数据结构:排序算法复习 日常打卡#include<iostream>#include<algorithm>#include<cstdlib>#include<cstdio>#include<string>#include<vector>#include<cstring>#include<map>#include<queue>#include<stack>#inclu原创 2020-12-08 14:33:37 · 87 阅读 · 0 评论 -
kmp-字符串简单匹配的优化
KMP字符串题目链接#include<iostream>#include<string>#include<vector>using namespace std;const int N=100000+10;string T=" ",S=" ";int tn,sn;int nextval[N];vector<int> vt;void get_next(){ int i=1,j=0; nextval[1]=0; .原创 2020-11-26 12:57:20 · 80 阅读 · 0 评论 -
DS -排序算法复习
冒泡排序快速排序直接插入排序二分插入排序希尔排序选择排序堆排序归并排序#include <iostream>#include<cstdlib>using namespace std;const int N=6;int n=5;int arr[N]={0,5,2,6,9,4};void p(){ for(int i=1;i<=n;i++){ cout<<arr[i]<<" "; } c原创 2020-10-21 12:32:58 · 162 阅读 · 0 评论 -
ds二叉树的代码-复习
三种建树,三种遍历高度,深度叶子树结点数中序线索化线索化遍历二叉排序树#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N=10;typedef struct Tre{ char data; Tre *l; T原创 2020-10-20 22:21:31 · 157 阅读 · 0 评论 -
哈夫曼树知识点-记录
哈夫曼树(二叉树)哈夫曼编码(压缩)(统计物品出现次数,生成哈夫曼树,左边为0,右边为1)解码(解压缩)哈夫曼n叉树(当用仅有的结点无法生成时,可以添加0值结点)原创 2020-09-19 13:44:00 · 586 阅读 · 0 评论 -
邻接表-存储图(C)
原文连接:链接点这里#include<stdio.h>#include<stdlib.h>#define MaxVertexNum 100typedef int Vertex;typedef int WeightType;typedef char DataType;bool Visited[] = { false };//边的定义typedef struct ENode* PtrToENode;struct ENode { Vertex V1, V2; W原创 2020-09-16 11:54:51 · 122 阅读 · 0 评论 -
时间复杂度O(n)空间O(1) 删除线性表中所有key元素
考研群里有个老哥刷到了一道题。20分钟搞定。。代码里面的注释为几种测试数据,完全没问题。题目:设计一个算法,时间复杂度为O(n),空间复杂度为O(1),删除线性表中所有为key的元素。第一行是输入的数组第二行是删除的数第三行是删除后的数组#include <iostream>using namespace std;int arr[5];//1 2 3 4 5//1 2 2 4 5//1 2 3 2 6//2 2 2 2 2//1 8 3 4 5int n = .原创 2020-08-16 17:51:55 · 320 阅读 · 0 评论 -
红黑树RB-TREE理论记录
简单理解为:二叉排序树+1.根为黑2.父子不同为红3.从根到叶子任一路径黑数相等一。每插入一个结点都默认为红色(以二叉排序树方式插入)二。当父叔子均为红-> 父叔变黑,祖父变红,指针指向祖父三。若右子树->父结点左旋若左子树-> 父变黑,祖父变红 ->右旋...原创 2020-07-27 15:19:11 · 88 阅读 · 0 评论 -
排序之 桶排序和计数排序
#include <iostream>using namespace std;int main(){ int a[10],res[100000]; for(int i=0;i<100000;i++){ //代表着可以排序100000以内的数据 res[i] = 0; //初始化res数组 } for(i=0;i<10;i++){ cin>>a[i]; //输入代排序的数据原创 2020-07-27 12:55:48 · 90 阅读 · 0 评论 -
论坛项目中评论的产生以及@父评论以及树状评论回显
回复:setparentcommment //回复时 +setparentcomment + 局部刷新 回显 @PostMapping("/comments") public String post(Comment comment, HttpSession session) { Long blogId = comment.getBlog().getId(); comment.setBlog(blogService.getBlog(blogId));原创 2020-07-01 13:09:41 · 347 阅读 · 0 评论 -
论坛项目中的标题重复的算法问题-最长连续公共子串
存储最长字串的信息类:(由于我的需求不需要获取具体字串所以后面不会获取到,仅仅定义而已)public class CommonResult { private String commonStr; private int commonCount; private int length; public CommonResult() { } public int getLength() { return length; }原创 2020-07-01 11:47:01 · 165 阅读 · 0 评论 -
标题重复率-最长连续公共子字串
参考1自https://www.cnblogs.com/Springtie/p/4068964.html参考2自https://blog.csdn.net/ten_sory/article/details/79857531原创 2020-07-01 03:38:59 · 132 阅读 · 0 评论 -
写spring项目中发现的算法问题
算法的重要性(地位)最近几天在做一个遗留的大创项目-校园论坛,在github上搜了一个雏形,进行代码的研究,Idea下Spring,Mavem,JPA数据库,Thymeleafui, elements Fragmets写前端。由于种种原因,剩下二十多天要结项了,几乎处于启动阶段,我不想浪费掉这次机会,所以叫上另一个小伙伴一起在这二十多天里,想要做出一个满意的项目上交审核,之前是相当于看过一遍spring mvc 和 mybatis的视频,有了一定的了解(做了笔记)。只写过登录注册。今天我们原创 2020-06-15 00:09:58 · 376 阅读 · 0 评论 -
数据结构与算法学习之分析排序算法时间的复杂度
本人的数学功底不是很好,如果有说得不好的地方请大佬指正。这里需要已经对这些排序算法理解了,才能听得懂我讲得复杂度问题.我不会再介绍他的具体动作.排序源码传送门时间复杂度:最内层循环的语句执行的次数。冒泡排序:最优状态:已经是我们所需的序列,外层for循环 第一轮,利用flag,因为已经是目标序列,所以第一轮内层for循环执行了一轮后,无任何元素交换,因此通过flag直接中断,跳出最外层循环,此时我们只执行了n-1次内层的for循环。结论:最优状态时冒泡排序的时间复杂度为O(n)。如原创 2020-06-06 21:37:31 · 196 阅读 · 0 评论 -
单调队列解滑动窗口-C++实现
传送门----滑动窗口解析和 C实现代码#include <iostream>#include <deque>using namespace std;const int N = 1000000;int n,k;//存储下标deque<int> min_v, max_v;int a[N + 10];int big[N+10];int small[N + 10];int arr = 1;void input() { cin >>原创 2020-06-06 01:50:10 · 522 阅读 · 0 评论 -
堆排序算法-数据结构与算法
堆排序分为两类:1.大顶堆:父的顶点比孩子结点都大。2.小顶堆:父的顶点比孩子结点都小。举例大顶堆:1.我们使用的是顺序存储【数组】,按层次存储(从上至下,从左至右),那么我们的编号的关系是:若父节点下标为key,那么左孩子结点的下标为2key,右孩子则为2key+1。 (因为右孩子在左孩子右一个位置,我们又按照层次顺序存储,所以左孩子+1等于右孩子)。2.我们拿到的也是一个数组,但是初始状态并不一定满足大根堆【不是大根堆】,所以我们要维护这个数组,对他进行调整。对初始数组的调整的过程原创 2020-06-04 14:18:08 · 191 阅读 · 0 评论 -
考研数据结构算法代码复习- 个人分类记法
负一:动态生成顺序表(栈.队列也是同样道理)+扩容零:1拆n①链表一.2逆转:①顺序表逆转②链表逆转-3指针法 //王道视频还是啥的讲过另一个方法二.5合并:顺序表合并①开辟空间②不开辟链表合并③开辟空间④不开辟⑤.2路-归并排序三.2排:归并排序-快排-执行时刻相反四.维护一个一维数组1.prim2.dijkstra五.维护一个队列1.bfs2.topological_sort六.维护一个二维数组floyd七.并查集 kruscalfather〔〕 fin原创 2020-06-03 13:48:04 · 366 阅读 · 0 评论 -
topological-拓扑排序-图
topological:1.把所有indegree为0的顶点入队2.当队不为空获取队头元素,并出队,记录。使用队头元素找到相邻的边后 使该点入度-1判断indegree为0入队--------- 当count为n时 拓扑成功-----------否则 失败 因:成环源码:#include <iostream>#include <algorithm>#include <limits.h>using namespace std;const int N原创 2020-06-02 22:17:57 · 151 阅读 · 0 评论 -
prim-普利姆算法-MST-最小生成树
prim对于顶点集的操作:源码:#include<bits/stdc++.h>using namespace std;const int adjacent_matri_max=1000;int vertex_num,edge_num; //顶点数量 边数量int price=0; //最小生成树代价 int adjacent_matri[adjacent_matri_max][adjacent_matri_max]; //邻接矩阵bo原创 2020-06-02 22:16:21 · 261 阅读 · 0 评论 -
Kruscal-克鲁斯卡尔-MST-最小生成树
Kruscal:运用并查集实现最好使用heap sort源码:#include <iostream>#include<algorithm>using namespace std;const int N=1000;/* run this program using the console pauser or add your own getch, system("pause") or input loop */struct EDGE{ int u,v,cost;原创 2020-06-02 22:14:05 · 113 阅读 · 0 评论 -
dfs-深度优先搜索-图
DFS:设置出口: count==n找邻接点为通路递归DFS i源码:#include <iostream>#include <cstdlib>using namespace std;/*注意 遇到不连通的图 (类似森林的图) 要加一个DFStravel函数 因为会遍历不到另一个连通块从这个函数开始 而不是DFS函数void DFSTravel(){ for(所有顶点) if(!vis) DFS()}*//* ru原创 2020-06-02 22:11:32 · 110 阅读 · 0 评论 -
bfs-广度优先搜索-图
BFS:通过维护一个queue,完成图的遍历。首先入队一个顶点v,然后循环操作:把v顶点的邻接点放入queue中出队时访问,把v设为出队的顶点。源码:#include <iostream>#include <queue>#include <cstdlib>using namespace std;/* run this program using the console pauser or add your own getch, system("pau原创 2020-06-02 22:08:46 · 153 阅读 · 0 评论 -
弗洛伊德floyd
floyd#include <iostream>#include <algorithm>#include <limits.h>using namespace std;const int N=100;int map[N][N];void init(){ for(int i=0; i<N; i++) { for(int j=0; j<N; j++) { map[i][j]=9999; } }}void floyd原创 2020-06-02 22:05:23 · 93 阅读 · 0 评论 -
迪杰斯特拉算法-Dijkstra-数据结构
Dijkstra:单源到多源的最短路径算法维护一个dist数组,每次在dist数组中寻找一个最短的且未访问的顶点,去更新其他剩下的顶点,直到所有的顶点都访问完毕。源码:#include<iostream> #include<algorithm>#include<cstring>#include<climits>using namespace std;const int N=100;/* run this program using the原创 2020-06-02 22:04:13 · 308 阅读 · 0 评论 -
并查集-实现-kruscal-最小生成树-模板-源码
kruscal本人手撸源码:(sort要改成堆排序,不要使用普通的排序)撸题传送门#include <iostream>#include<algorithm>using namespace std;const int N=1000;/* run this program using the console pauser or add your own getch, system("pause") or input loop *///收集边集struct EDGE原创 2020-06-02 13:56:16 · 153 阅读 · 0 评论 -
STL vector 和 list 的内部结构分析
STL vector 和 list 的内部结构vector: (俗称:动态数组)使用方式:#include <vector> //要先含入vector的头文件#include <algorithm>int main(){ //每次创建一个vector对象需要给一个泛型,指定vector存储的数组类型 //以下演示三种创建vector的方法 vector<string> sv; //调用无参构造函数,创建一个空的vector 名字为sv vec原创 2020-06-02 13:41:13 · 315 阅读 · 0 评论 -
滑动窗口-普通队列以及单调队列解法
滑动窗口的普通队列单调队列的这篇文章倾向于自用-代码是手撸源码,可以运行普通队列用i j作为窗口的边界维护i到j ,找到以i到j为边界的min 和 max 并保存下来即可。时间复杂度O(n^2) 不能AC#include<iostream>using namespace std;const int N=1000000;int a[N+10];int n;int k;int min_a[N+10];int max_a[N+10];int sum=0;void so原创 2020-05-31 20:24:50 · 336 阅读 · 0 评论 -
蓝桥杯模拟赛2021最小生成树-通电-模板题
蓝桥杯模拟赛2021最小生成树-通电-模板题题目题目J 题:问题描述 2015年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。 这一次,小明要帮助 n 个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。 现在,这 n 个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄,使得所有村庄都直接或间接的与发电站相通。 小明测量了所有村庄的位置(坐标)和高度,如果要连接两个村庄,小明需要花费两个村庄之间的坐标距离加上高度差的原创 2020-05-30 18:24:33 · 814 阅读 · 1 评论 -
查找排序算法描述+源码
查找排序算法描述用于看文字描述后容易写出相对应的查找排序算法代码1.基数排序2.选择排序 【0号位为哨兵】3.冒泡 疯狂交换排序4.直接插入排序5.二分插入排序6.快速排序7.归并排序 与快排做对比叙述本人手撸源码合集。顺序.二分查找+简单选择排序+堆排序+冒泡排序+快速排序+直接插入排序+二分插入排序+希尔排序+归并排序源码在文章最后面用于看文字描述后容易写出相对应的查找排序算法代码1.基数排序本质上是对一个数(例如5400)的每一位都进行排序①所需要的n个队列,n是所有数字的范围123,45原创 2020-05-30 17:48:18 · 441 阅读 · 0 评论 -
数据结构二叉树算法C/C++
二叉树算法描述用于看文字描述后容易写出相对应的二叉树算法代码二叉树代码解析中序线索树二叉排序树用于看文字描述后容易写出相对应的二叉树算法代码这篇文章倾向于自用-代码是手撸源码,可以运行二叉树代码解析二叉树一.CTree 建树1.函数体内输入2.两种结点①输入为# 设为NULL②输入不为# 【abc调换顺序即为三种创建树】a.申请空间赋值b.递归左子树c.递归右子树.二。.TraversalT不为NULL 【abc调换顺序即为三种遍历树】a.访问Tb.递归左子树c.原创 2020-05-30 17:26:13 · 272 阅读 · 0 评论 -
数据结构图论代码-描述篇
图论算法描述用于看文字描述后容易写出相对应的图论代码dijkstrafloyd**DFS && BFS****Kruscal:**Prim:**topologicalsort**用于看文字描述后容易写出相对应的图论代码这篇文章倾向于自用图论的解析**dijkstra**1.设置初始点为true2.初始点更新 「直接使用map中的行更新」3.在剩下的顶点中选最小的顶点v4.先设为true5.使用顶点v更新「用dist数组中v+map中v行<dist数组i顶点」*原创 2020-05-30 17:03:42 · 332 阅读 · 0 评论 -
据结构及算法概述-考研
数据结构及算法概述-考研介绍数据结构和算法下面先介绍数据结构线性表【线性结构的表】顺序表 list链表 linklist栈 stack队列 queue非线性表 【树是分岔的,图是你懂的 ... ...】树 tree图 graph堆 heap数组 array广义表串 string散列表以下是查找:顺序查找二分查找二叉排序树查找分块查找以下是排序:选择排序X2交换排序X2插入排序X3归并排序基数排序本人本科科班小zz把所有知识点都理解了一遍 +做了天勤的小册子练习题的原创 2020-05-30 14:07:21 · 620 阅读 · 0 评论