
数据结构与算法
文章平均质量分 74
leetcode系列
dreambyday
我大抵是病了,
横竖都写不出一行代码。
站起身来点起了一支烟,
这悲伤没有由来。
默默然跑到楼下买了根82年老冰棍,
一口是我吃的,
另一口也是我吃的,
大抵又是到了摸鱼的时刻了吧。
展开
-
【算法】二分查找
二分查找模板原创 2017-05-15 21:09:11 · 305 阅读 · 0 评论 -
【算法】前缀树
本质是一个多叉树,利用字符串的公共前缀来减少查询时间。查询、插入的时间复杂度为O(s) (s为操作的字符串长度)上图为下面模板插入后生成的多叉树。原创 2016-12-23 14:26:51 · 396 阅读 · 0 评论 -
【算法】排序
直接冒泡会超时,交换次数太多。采用归并排序省略交换过程,直接排序。 题目实际要求求逆序对的个数,在归并排序的过程中记录一个逆序对交换位置需要交换的次数 如: a1数组 4 6 8 a2数组 1 5 7 4,1逆序,需要交换三次(4后面两个数以及与1交换) 6,5逆序,需要交换两次(6后面一个以及与5交换) 8,7逆序,交换一次(8与7交换) 共六次原创 2016-12-27 19:20:26 · 443 阅读 · 0 评论 -
【算法】【最小生成树】 Kruskal&&Prim
1).记Graph中有v个顶点,e个边2).新建图Graphnew,Graphnew中拥有原图中相同的e个顶点,但没有边3).将原图Graph中所有e个边按权值从小到大排序4).循环:从权值最小的边开始遍历每条边 直至图Graph中所有的节点都在同一个连通分量中 如果 这条边连接的两个节点于图Graphnew中不在同一个连通分量中就添加这条边到图Graphnew中#inclu原创 2017-02-05 10:38:20 · 338 阅读 · 0 评论 -
【算法】【差分数组】解决连续空间改变相同值的问题
将原数组每个值减去前一个值,得到的新数组是差分数组diskak−ak−1如:原数组为1235得到的差分数组为1112通过计算差分数组的前缀和,可以得到原数组。1111111112。原创 2023-06-08 22:49:39 · 402 阅读 · 0 评论 -
【算法】缓存淘汰策略 及Java实现
1. LRU(Least Recently Used)最近最少使用2. LFU(Least Frequently Used)最近最不经常使用3. 近似LRU算法4. TTL(Time To Live)超时时间5. FIFO(First In First Out)先进先出6. Random随机淘汰原创 2022-10-07 19:58:46 · 639 阅读 · 0 评论 -
【例题】【动态规划】最长公共子序列
求两个字符串的最长公共子序列长度。原创 2019-03-07 20:27:15 · 219 阅读 · 0 评论 -
【算法】【动态规划】【背包九讲】Knapsack Problem
1.01背包问题2.完全背包问题3.多重背包问题4.混合背包问题5.二维费用的背包问题6.分组背包问题7.有依赖的背包问题8.背包问题求方案数9.求背包问题的具体方案原创 2017-08-31 11:36:13 · 686 阅读 · 0 评论 -
【算法】【最短路】SPFA
在网上找了些spfa代码,大多数给了我冗杂的感觉。看了其思想后我照着写了一个,保存一下方便以后寻找不足并改进。 spfa是bellman-ford的改进,bellman-ford的想法是把每个边都松弛一下,算法复杂度是V^2,大部分的时间浪费在了查找新的点s和更新当前点的最短距离d。我对于spfa的理解就是bfs或dfs的变形。先用邻接表保存某个点的相邻点(节点参数 : 节点编号,两点距离),原创 2017-02-07 21:01:15 · 570 阅读 · 0 评论 -
【算法】【最短路】Dijkstra 迪杰斯特拉
建图,点与相连的第一个点边值为0,与其他点相连为1,与不相连点的边为INF。单源最短路,求最短路中的最大值。用dijkstra直接求。原创 2017-08-30 19:05:08 · 285 阅读 · 0 评论 -
【算法】【最短路】Bellman-Ford
求经过有限点的最短路。原创 2018-06-08 11:28:01 · 1069 阅读 · 0 评论 -
【算法】【最短路】Dijkstra/Bellman-Ford/SPFA/Floyd 分析
首先是bfs写法的spfa。构建一个队列,选择一个点位源点,并将源点入队。不断从队列中取出一个节点,并沿着相邻的边进行松弛,将松弛后的边连着的节点入队。将取出的节点出队。 某个节点出队后还能再入队。因为某次松弛后的结果不一定是最短的结果,可能还能够通过某条路径进行松弛。 一个节点最多入队N-1次(节点数目-1),也就是说当某个节点入队N次说明图中存在负权回路。原因,,,不知道。有待补充原创 2017-05-26 21:05:57 · 298 阅读 · 0 评论 -
【算法】【并查集】路径压缩+按秩合并
题目:http://poj.org/problem?id=2492 题的解答方法跟食物链差不多,可以看看食物链的解析再看这个。 食物链 http://blog.youkuaiyun.com/dreambyday/article/details/65447189 rela[x]=0表示同性 rela[x]=1表示异性#include#include#includ原创 2017-03-23 19:30:45 · 1797 阅读 · 0 评论 -
【算法】【拓扑排序】
拓扑排序(Topological Order)是指,将一个有向无环图(Directed Acyclic Graph简称DAG)进行排序进而得到一个有序的线性序列。如上图,排序结果可以为(a beg cf d),也可以为(a bcd eg f)。e和c之间的大小关系无法比较,因此排序顺序也是不确定的。拓扑+并查集 多节点算为图中一个节点拓扑+动态规划 从后往前计算每个结点信息拓扑判断环。原创 2017-12-14 14:40:59 · 646 阅读 · 0 评论 -
【算法】【树状数组】 原理详解、模板与例题
树状数组的特点是:树状数组的下标为管辖区间的结尾。求和需要将自己及之前的所有区间和相加,因此需要不断找上个区间。如arr[1]的值从3变成7,相当于其结果增加了4,则依次更新树状数组的节点及父节点。m次操作,每次操作可以查询数组区间长度为n的 和/积,或者更新某位置的值。遍历原始数组,相当于每次对树状数组的值进行更新(数组初始元素为0)下图为建立树状数组的过程及查询、更新的逻辑。求区间[4,7]的和,则是求出[1,7]的和-[1,3]的和。如图,树状数组每个位置存储一段区间和。图中蓝线是找上个区间的含义,原创 2017-03-11 05:46:41 · 591 阅读 · 0 评论 -
java 带括号 四则运算 计算器
递归计算括号里的公式。操作栈数值栈java计算器原创 2022-08-28 18:58:16 · 1085 阅读 · 0 评论 -
【算法】【拒绝采样】构造 随机分布/函数
LeetCode 中 拒绝采样 的通用解法原创 2022-06-05 19:46:49 · 1249 阅读 · 0 评论