自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 暴力递归与动态规划

3.标出直接出答案的位置(根据basecase)1.尝试版本(从左往右试,范围尝试),70%题目。可变参数最好是零维,比如整型,不要是数组。递归 -> 记忆化搜索 -> 严格表依赖。4.推普遍位置是如何依赖其他位置的。5.定出严格表依次计算的顺序。1.分析可变参数变化范围。2.标出要计算的终止位置。3.严格表结构动态规划。

2023-09-28 15:15:37 34

原创 位运算的题目

先判断是2的幂,再跟0101010101...010101(32位)相与,结果不为0。4的幂:32位只有一个1,且1在第0,2,4...位上。2)取32位上的一个1,将其减1,跟原数做与,结果为0。2的幂:32位只有一个1。1)求最右侧1,看是否与原数相等。

2023-09-27 10:45:44 13

原创 大数据题目

将0~ 2^32 - 1 范围(即大小为2^32的范围)均分为512份,每个范围为2^32/512 = 2^23,统计40亿个数落在每个范围的个数。2^32的范围,一分为二,用两个变量分别统计每个范围的词频,一定有某个范围词频不足2^32/2,再对该范围进行二分,一直二分下去。把所有大根堆的堆顶加入一个大根堆(总堆),每次从总堆弹出一个,并把相应大根堆的堆顶去掉,新的堆顶加入总堆。位图:每两个位表示一个数,00表示出现0次,01表示出现1次,10表示出现2次,11表示出现3次及以上。

2023-09-26 22:42:37 23

原创 单调栈结构

2)此时栈顶元素的左边最近的比他大的数是当前栈顶元素,栈顶元素的右边最近的比它大的数是遍历数组的当前元素。2)此时栈顶元素的左边最近的比他大的数是当前栈顶元素,栈顶元素的右边最近的比它大的数是遍历数组的当前元素。依次弹出栈顶元素,栈顶元素左边最近的比他大的数是它压着的元素,无右边最近的比它大的数。如果等于:将当前元素与栈顶元素合为一个元素(含原两个元素的下标),加入栈。从左向右将遍历数组,如果元素小于栈顶元素,加入。从左向右将遍历数组,如果元素小于栈顶元素,加入。3)继续遍历当前元素。

2023-09-26 10:48:43 15

原创 滑动窗口机制

R右移:在队列尾加入元素,如果当前尾元素小于等于要加入的元素,弹出,直到队列空或当前尾元素大于要加入的元素。这样,双端队列从头到尾是当前窗口内数组从左到右依次过期,依次会有哪些数字成为最大值。L左移:检查队列头元素是否为L移动前所在元素,是则去掉头元素,否则return。因此对尾元素没有存在的必要了,故弹出。因此对尾元素没有存在的必要了,故弹出。2)加入的数字比对尾元素晚过期。2)加入的数字比对尾元素晚过期。1)加入的数字与队尾元素等大。1)加入的数字比队尾元素大。

2023-09-25 23:27:15 51 1

原创 Manacher算法

特殊字符可以为任意字符,不会与字符串字符混淆,因为以任意字符为中心,比较左右两边字符时,总是实字符跟实字符比较,虚字符跟虚字符比较。使用特殊字符扩充字符串,如"1221"扩充为"#1#2#2#1#",这样方便找字符个数为偶数的回文子串。(1)i ' 的回文区域彻底在 (L ~ R) 里面 i 的回文半径 = i ' 的回文半径。(2)i ' 的回文区域在 [L , R] 外面 i 的回文半径 = R - i + 1。"#a#1#2#1#b#",字符‘2’的回文半径是4,回文直径是7。

2023-09-25 22:15:29 16 1

原创 字符串匹配算法KMP

假设此时str1以 i ~ j - 1 范围中有位置k,以k为str1的起点,可以配出str2。那么由k到X-1这一段一定与str从0开始的一段相等,也就是说,str2从0开始更长的一段和str2以Y结尾更长的一段相等,则str2的位置Y找到了一个更大的最长前缀后缀匹配长度,与已知条件矛盾。2)此时实际上是str1以j为起点,str2以0为起点开始配,但是因为三个框字符串相同,因此str1位置不变,还指向结尾,str2指向str2[ next[最后] ]时间复杂度:O(M) M为str2长度。

2023-09-25 18:11:05 17 1

原创 并查集 UnionFindSet

如果并查集中有N个元素,findHead次数达到O(N)水平,单次findHead代价O(1)左侧cpu找到两个岛A和B,右侧cpu找到两个岛C和D。每个cpu找自己的岛,收集自己的四个边界的信息,最后合并。解决并查集中链过长的问题,使得下次操作可以一步到位。在查找Y的顶部时,会把查找沿途地点直接指向顶部。两cpu记录每个边界1点所对应的岛。

2023-09-25 15:43:42 16 1

原创 哈希函数与哈希表

的平均代价O(1):设置链表长度k很长,每次遍历链表依然很快,但可以极大减少扩容代价,即虽然每次哈希操作的平均代价O(log N),但底下除了一个非常大的常数,因此逼近O(1),此外,哈希表有增有删,删除操作也会减少扩容的次数。解:对所有数字取哈希,然后对100去摸,由于哈希函数的均匀性,可以认为0 ~ 99 中含有数字的种类数是差不多的。忽略哈希表需要的空间。集合添加:对每个数,使用k个哈希函数,得到k个输出,k个输出均对m取模,得到k个 0 ~ m - 1 的数(可能有重复),把位图中这k个位置描黑。

2023-09-25 10:31:50 18 1

原创 暴力递归(尝试所有可能的情况)

1.把问题转化为规模缩小了的同类问题的子问题。3.有当得到了子问题的结果之后的决策过程。2.有明确的不需要继续进行递归的条件。全排列去重:启用注释掉的代码。4.不记录每一个子问题的解。

2023-09-24 16:33:17 21 1

原创 图表示与图算法

把任意点加入集合,该点的边中另一点未加入集合的边解锁,在所有解锁的边中找最小边,将边的另一点加入集合,以此类推。在distanceMap未选定点中选择value值最小的点 以此类推。distanceMap开始时为 0 无穷 无穷 无穷 无穷。在distanceMap未选定点中选择value值最小的点node。先输出入度为0的点,消除该点的影响,继续输出入度为0的点。根据node点相连的边调整distanceMap。单源最短路径算法(Dijkstra算法)图的最小生成树(MST)算法。

2023-09-24 12:07:57 20 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除