数据结构与算法
文章平均质量分 65
双非鼠不想认输
盲目的引入新的组件,系统会变得更加脆弱
展开
-
滑动窗口模板
满足XXX条件(计算结果,出现次数,同时包含)最长/最短的子串/子数组例如: 长度最小的子数组。原创 2023-07-30 16:53:00 · 265 阅读 · 0 评论 -
树状数组详解
为了做到对区间的快速查询,可能你会想到前缀和来优化这个查询,这样区间查询的话是O(1)的复杂度。但如果发生了单点更新,在之后的所有前缀和都要更新,修改的时间复杂度是O(n),并不能解决问题。原创 2023-07-07 17:33:12 · 263 阅读 · 0 评论 -
二分答案(模板)
二分答案(模板)原创 2022-10-03 16:42:25 · 1187 阅读 · 1 评论 -
tarjian算法解决强连通分量问题
一.tarjian算法解决强连通分量强连通:有向图中,从任意点i可到达任意点j。强连通分量:在一个有向图G中,有一个子图,这个子图每2个点都满足强连通,我们就叫这个子图叫做强连通分量。tarjian算法其实就是用dfs实现的,每个强连通分量为搜索树中的一棵子树。在实现时我们需要两个重要的数组:dfn[]:即时间戳,表示他在dfs(tarjan)中是第几个被搜到的。可以依据dfn[]是否等于0来判断该点是否被访问过。low[]表示该点通过有向边可回溯的最早的时间戳(即dfn[])原创 2022-02-18 08:15:02 · 687 阅读 · 0 评论 -
floyd,dijkstra算法
今天学了floyd和dijkstra算法。floyd算法基本思想:最刚开始只允许经过1号顶点进行中转,接下来只允许经过1和2号顶点进行中转......允许经过1~n号所有顶点进行中转,求任意两点之间的最短路程。代码实现如下:#include<stdio.h>#define inf 0x3f3f3f3fint e[51][51];int main(){ int n,m; scanf("%d%d",&n,&m); for(int i=原创 2022-02-12 11:10:13 · 758 阅读 · 0 评论 -
字符串hash
字符串hash原创 2022-02-09 09:00:45 · 848 阅读 · 0 评论 -
并查集的基本操作
今天进一步深入了对并查集的学习,动手实现了并查集的合并与查找。下面是并查集的初始化(因为刚开始各个节点还没有任何关系,他们的父节点就是他们自己):#include<stdio.h>#include<string.h>int fa[10001];//存着每个节点的父节点int main(){ int n=0; scanf("%d",&n); for(int i=1; i<=n; i++) fa[i]=i;原创 2022-01-18 08:26:11 · 679 阅读 · 0 评论 -
0-1背包问题,完全背包,多重背包
问题引入:在做- [P2392 kkksc03考前临时抱佛脚]时感觉它应该是个跟动态规划有关的题,但是我的动态规划相当的垃圾,连0-1背包都不会,于是就去从0-1背包开始学起。0-1背包指的是给出若干物品的价值和重量,每个物品只有一个,要求用一定的背包容量装物品后的最大价值。可以先看个表格观察对于第i件物品来说:w[i](重量)>c(背包容量):放不下,最大价值= i-1件物品讨论时的最大价值w[i]...............原创 2022-01-14 08:29:21 · 401 阅读 · 0 评论 -
单链表新手入门基本操作(c语言)
我想介绍一下单链表的七大基本操作:1.遍历2.求元素个数3.查找4.插入5.创建链表(头插和尾插)6.删除7.释放原创 2021-12-19 19:30:50 · 1788 阅读 · 1 评论 -
数组(二分查找、双指针、滑动窗口)
数组(二分查找、双指针、滑动窗口)原创 2023-03-05 22:17:00 · 278 阅读 · 0 评论 -
时间复杂度与空间复杂度
时间复杂度与空间复杂度原创 2023-02-21 09:54:48 · 275 阅读 · 0 评论