算法笔记
文章平均质量分 91
Leetcode刷题总结
雪照繁星
这个作者很懒,什么都没留下…
展开
-
素数筛(埃氏筛和欧拉筛)
我们简化为i = a * m,其中m为b * c * ...,a为最小质因数,我们用一个数组prime来存储目前的素数集合,我们设目前遍历到的数字为i,由正整数的唯一分解定理可知,i = a * m,假设a为最小质因数,那么在遍历到i之前已经确定了[2,i-1]内所有质数的倍数了,比如说i = 12,那么在i = 6,prime[j] = 2时已经标识过一次。我们对上面的算法可以进行一些改进,我们在判断素数的时候遍历到n,但实际情况两个数相乘x * y = n,那么x,y必须有一个大于。原创 2023-05-06 10:36:29 · 208 阅读 · 0 评论 -
树形DP算法
而要求左右子树的最大深度,我们要分别对左右子树进行递归,递归计算树的深度的同时,我们也可以计算以该子树的直径,并用一个值ans来维护,找到ans的最大值即为我们要求的二叉树直径的最大值。那么我们该如何求二叉树的直径呢,学过数据结构的同学可能知道,二叉树具有着天然的和原问题相似的子问题结构,在求树的深度的时候我们就可将树分为左子树,右子树和根,分别对左右子树递归得到树的深度。首先我们先分析题目什么是二叉树的直径,如下图所示,红色部分即是二叉树的直径,可以经过根节点也可以不经过根节点。原创 2023-04-27 10:09:23 · 119 阅读 · 1 评论