![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
肖源杰
这个作者很懒,什么都没留下…
展开
-
2192. 有向无环图中一个节点的所有祖先(邻接表 加 拓扑排序)
图论、邻接表、拓扑排序原创 2022-09-13 16:48:51 · 340 阅读 · 0 评论 -
起点可为任意点的dijkstra最短路
图论dijkstra原创 2022-09-01 22:06:47 · 125 阅读 · 0 评论 -
ACW 方格取数 (最长上升子序列模型)
这一题用到的方法在于,理解成两条路径,f[i1][j1][i2][j2]来表示分别从(1,1)(1,1)走到(i1,j1)(i2, j2)时的最大值,这时候的时间复杂度时O(n4)进一步可以发现,问题求的是到终点时,需要的最大值,即两条路径终点重合,两条路走的步数是一样的,假设k为走的步数, k = i1 + j1 = i2 + j2,那么原来的四维数组便可以简化成三维f[k][i1][i2],纵坐标分别是k - i1与k - i2。因为一个点只能拿一次,且只能向下或者向右,除非同时到达一个相同的点..原创 2022-04-28 22:45:44 · 227 阅读 · 0 评论 -
算法:树状数组
树状数组解决的两个问题:快速求前缀和 O(log2n)修改某一个数 O(log2n)上面两个操作分别用可以实现相应的做法前缀和 O(n) O(1)数组 O(n) O(1)树状数组折中算法原理基于二进制算法:每一个数可以被分为最多log(x)个部分可以使得我们在log(n)的时间复杂度之内,求出前n项的前缀和,分析一个上面每个区间分别由几个数(绿字):再观察每个区间右端点和区间长度的关系:假设一个左开右闭区间(L , R],其区间长度一定是R的二进制原创 2022-03-22 11:57:20 · 177 阅读 · 0 评论 -
307. 区域和检索 - 数组可修改
树状数组和线段树经典问题树状数组相比线段树,代码段,空间更复杂度底,能用树状数组做的就用树状数组,线段树能做的,树状数组不一定能做。树状数组主要三个模板函数:lowbit(x) : x & (-x) 会返回最后一个1的数求前缀和,求x左边的所有和修改一个数ax += v, 把比x大的位置都更新一遍如何初始化树状数组,比如将原素组a[i]初始化成树状数组,可以将 里面的元素一个个插入到树状数组里,这个时间复杂度是O(nlog(n))的,也是由O(n)的插入方式的,要用到定义,但.原创 2022-03-22 11:53:28 · 107 阅读 · 0 评论 -
离散化:区间和
离散化,将一个无限长的数组,里面的有数的位置,建立一个映射,即把所有用到的数,建立成一个从1开始的数组就可以了 ,这里输入n个加入的数的下标以及m对左右区间,共n + 2 * m <= 3 * 105 个坐标,故最后坐标的区间范围小于3 * 105个,可以作为新数组坐标的数组范围。假设原来用到的下标是1, 2, 100, 2000, 30000, 将之映射到新的下标即可。做好了映射之后,开始对相应的映射组成一个新的数组a[N],并对之进行前缀和操作:先将所有需要操作的代码下标写进一个..原创 2022-03-22 09:40:43 · 418 阅读 · 0 评论 -
题目:数值的整数次方(时间复杂度为log~2~N)(快速幂)解法及注意事项
原题链接: link.给定一个double型变量x和int型变量n,求 xn。不得使用库函数同时也不需要考虑大数的问题。样例1输入:10 ,2输出:100样例2输入:10 ,-2 输出:0.01思路最直观的解法是暴力求解,n次循环时间复杂度为O(n)。若需要进行多行输入则会大大增加计算量。如:link若n为109,暴力求解需要循环109次,而快速幂算法log2109 约等于30次!以下需要多次阅读以进行加深理解 首先任何一个数n,可以分解成log2n个数相加。 原理即二进原创 2021-10-10 14:01:57 · 287 阅读 · 0 评论