- 博客(16)
- 问答 (4)
- 收藏
- 关注
原创 算法学习 递归->记忆化->dp
1.一共1-N个位置 给定起始位置cur终止位置end,以及步数rest,求cur走rest到end的方法数s。4.找零,给一组无限张的零钱,1 2 3 4 5...求找开给定面值的找零方法数(背包)2.给定一组硬币,选择其中的硬币组成面值为rest的硬币组合,求该组合的最小数量。递归的尝试是重点,有按照范围的尝试,如L-R找答案,有从左到右的尝试i-R。如 1 2 3 4 5 组成5,最少1个,从左往右尝试 dp查单表。3.一组数,只拿左右两边的其中一边,绝顶聪明,求获胜的最大数值。
2025-02-23 14:54:42
146
原创 算法学习 大数据题
哈希分流到小文件,再在小文件中维护一个大根堆,再将各个小文件的堆顶汇总成总大根堆,总大根堆的顶为TOP,取出后从取出的顶所在小文件的堆顶加入总大根堆,重复100次。限10MB 用10MB作为数组如int A[512] ,将40亿划分到512个区间上,统计词频,递归不满的区间即可找到,需重复多次遍历整个数据。将10MB划分成数组统计词频,每个元素均分32位表示的范围,累加前n项,从刚好超出中位数个数的元素区域确定中位数所在范围,递归确定更小范围。100亿个url的大文件,每个url64B,找出重复URL。
2025-02-19 20:27:05
163
原创 算法学习树形dp
2)有左孩子,找到左树的mostright,右孩子 A:若指向空,改指向cur,cur左移。B:若指向cur,改指向null,cur右移。第一次为先序,第二次为中序,第二次时逆序打印左树右边界为后序(最后单打印整树右边界)最大快乐值:员工关系呈现树状,老板作为根结点,上级来了直属下级不能来(隔代来)2)结点不参与 max(左树最大距离,右树最大距离)1)X来 X乐+累加 max(下级来,下级不来)2)X不来 0+累加 max(下级来,下级不来)basecase 叶(0,0)1)无左孩子,cur右移动。
2025-02-19 20:07:23
180
原创 算法学习 单调栈
a b c 中,bc不会出现比c要大的元素,若有,该元素已经将b弹出。ab中也不会出现比a要大的元素,若有a已经被弹出,也不会存在大于b小于a的元素,若有b不会与a相碰,而是与该大于b小于a的元素相接。维持栈底大于顶的单调性,压入时,若压入元素大于栈内元素,弹出该栈内元素,右标记为当前压入元素,左标记为该栈内元素的在栈内的下一个元素。遍历完之后,栈内逐个弹出,左标记为该元素在栈内的下一个元素,右标记为空。在数组中找到一个数,左边和右边比这个数小,且离这个数最近的位置。用单调栈,找到左右两边比自己小的数。
2025-02-10 17:30:15
175
原创 算法学习 滑动窗口的最大最小值
双端队列,队列中保存数组下标,保持队列中右大于左,只能从左进,最大数为最右,每次R滑动时,从左边加入最新值,保持右大于左的特性,在左边弹出违背的元素。L滑动时判断过期元素是否在右端口,不是则不用管。双端队列维持的是最大值可能且最晚过期的值,后入的较大值会将先入的较小全部弹出。较前的较小值不会存在队列中。滑动窗口LR指针只能往右走,且L小于R。
2025-02-10 17:04:54
101
原创 算法学习 Manacher求最大回文串
维护r和c,pArr[] r为回文最右边界,c是当前r的回文中心点,pArr[i]是i为中心时的回文半径。3)i’回文正好压线LR i的回文半径至少是i到R,需要在该半径基础上继续扩。2)i‘回文在LR之外 i的回文半径是i到R。1)i‘回文在LR之间 i与i’的回文情况一致(对称)2)i在r边界内,存在L i' c i R。重点理解pArr[]的计算过程,Manacher算法的关键。以i为中心点暴力扩,若扩后边界大于r,更新r,c。共4情况,只有1,4会使得R变化。1)i不在r边界内,i>r。
2025-02-10 15:25:23
149
原创 算法学习KMP,并查集
abcdfgx.... abcdefga|y 此时y代表的位置是i,a是i-1,cn指向前面字符串的x,已知abcdefg已经是重复,判断两字符串的后一个是否一致即可快速计算,若不一样,cn往前跳,找到下一个存在重复字符串的位置,直至cn跳到-1(不存在重复)子串根据next的数值来回移动,主串只增不减,使得主串当前要比较的字符的前缀与子串当前比较字符的前缀一致,子串一直往前跳,直到第一个也对不上,主串移动。findhead 给定元素,一直往上找,直到根,查找完再次查找将路径全挂在根上压缩路径。
2025-02-10 13:57:49
213
原创 算法学习 一致性哈希 布隆过滤器
如给3台服务器分配1k个字符串,在这1k个字符串上面作哈希,此时哈希环上有平均分布3k个虚拟节点,三台服务器可均衡存储数据。通过计算n台服务器的唯一标识如ip的哈希,将环划分为n段,数据按顺时针方向选择归属的服务器,落在第n段归属n服务器。朴素版本:数据通过哈希取余来选择归属的数据服务器,不增不减时可实现负载均衡,当出现删减服务器时,迁移代价过大,需所有数据重新计数归属数据服务器。检查时与构建时一样操作,当哈希结果所表示的位全为1时,该用户处黑名单中,可能存在哈希碰撞,使白名单误判,但不会使黑变白。
2025-01-08 10:44:00
381
原创 算法学习 暴力递归
暴力递归1.把问题转化为规模缩小了的同类问题的子问题2.有明确的不需要继续进行递归的条件(base case)3.有当得到了子问题的结果之后的决策过程4.不记录每一个子问题的解动态规划的基础。
2025-01-05 23:32:42
403
原创 算法学习 贪心 堆应用 前缀树 N皇后
两个堆,一个小顶堆(启动资金排序)用于存放启动不了的项目,一个大顶堆(收益排序)存放启动资金足够的项目,但大顶堆中无项目或者已完成K个项目停止。Q2:切金条问题,长度为n的金条需要花费n金币,需要将长度为n的金条分成所需要的长度(a,b,c...)结点含pass,end值,结点数组分别表示多少以这个为前缀,多少个这个字符串,多少条往下的道路。Q4:有M本金,可以完成k个项目(不可并行),知道项目的启动资金和收益,求最大收益。Q3:会议问题,知道会议开始和结束的时间,如何使一天安排最多的会议。
2025-01-05 19:29:35
262
原创 算法学习 图
维护一个数组,表示源点到其他点的最短路径,每次选中其中最短路径的点(选过不再选择),源点经过该选择点到其余未选择点是否存在更短的路径,有则更新。从点的角度出发,维护一个边集合(小根堆 ),每加入一个新结点,将新边加入集合,选出最小且不成环(哈希表即可,只涉及一个与一群)的边,加入再新结点,直至结点全部加入。存储方式:邻接矩阵、邻接表。指定一种适合自己的存储方式,将各种表达方式转成自己熟悉的存储方式。边的角度出发,排序边,加入新边的时候判断是否成环(一群与一群)。队列+集合,队列实现BFS,集合实现不重复。
2025-01-04 17:16:32
161
原创 算法学习 二叉树
弹出时,若当前结点不为curend,nodes++,左右孩子进队列,每次进队列修改nextend为最新进队列结点。当弹出结点为curend时,收集当前层结点数目nodes,将curend置为nextend(该层结束进入下一层),nextend=null,nodes=0.法一:使用层次遍历,用map<Node,Level>记录结点和层数的关系,用一个变量记录当前层数,一个变量记录当前层的结点数目。注意两个标志,不存在左空右不空(01)的结点,出现孩子不满结点后(00,10),其余全为叶子结点。
2025-01-04 13:10:02
601
原创 算法学习 排序总结 链表 双指针
法2:克隆结点放于原结点之后,即Node.next=Node0 ,修改完原链表后,遍历复制克隆结点的random指针,可通过Node.next=Node0寻找原结点和克隆结点的对应关系。若end不相同则,不交,若end同,让len短的先走abs(len1-len2),再一起走。给定两个可能有环的单链表,head1和head2,若两个链表相交,返回第一个相交结点,若不交,返回null。维护6个指针,左区域的头尾,中间区间的头尾,右区域的头尾,最后再首尾相接,相接时注意判断某区域是否为空。
2025-01-02 12:22:57
586
原创 算法学习 堆 桶排序 基数排序
原数组从0-N遍历,记录于count中,再将count修改成累加和的形式(将数据分片),意义由i有x位到小于等于i的有y位。再从N-0遍历,一个个填入help数组收集,存放位置为count[]指向的下标,存一个数后count[]--。运用小根堆,假设k为6,说明前7个元素中第一个元素已经确定,取小根堆堆顶放入后,往后遍历取堆顶即可。法二:从heap size/2往前遍历,一直执行heapify向下调整,使子树先调整成堆。i结点的左孩子2*i+1,右孩子 2*i+2 ,父结点i-1/2。
2024-12-31 19:18:13
157
原创 算法学习 递归 荷兰国旗 快排
return 递归的操作部分,如收集两process的结果。三指针,记录小于区域右边界j,大于区域左边界k,遍历指针i。a为子问题数据,b为子问题规模,d为递归的额外操作。归并时,左右侧有序,右小时,累加左侧长度即可。双指针,记录小于等于区域的右边界以及遍历指针。2.根据num划分三个区域,小于;(左边有多少数大于右边)=右边多少小于左边。1.根据num划分两个区域,小于等于;1返回num的下标;小于时,j+1与i交换,i++,j扩。3.三个版本快排前两版本与1,2对应。大于时,k-1与i交换,k扩。
2024-12-31 01:26:26
214
原创 算法学习 位运算
取中值防溢出mid=L+(R-L)>>1 数学公式的简单转换。找出最低位不同的二进制位one=one&(~one+1)通过a,b某一二进制位的不同划分成两组数据,转为问题2。3.找出两奇数次a,b。
2024-12-31 01:05:59
104
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人