
算法学习
欲掩
分享自己学习的内容
展开
-
并查集的一些操作
/下面代码是将一组元素合并到一个集合中,使得这组元素有一个共同的根节点fa。//如果是fa还未初始化的话,则将fa初始化为 x所属集合的根节点。if(fa === fb) cout<<"属于同一个部落"<<endl;//如果是后来的节点,并且,新节点所属集合的根节点不是fa,//则将当前节点的根节点fx的父节点 设置为 fa。//相当于将 x 所在的集合合并到fa的集合中。//找到a,b所属集合的根节点。//p[i]表示节点i所属的集合。//find函数是找到x的根节点。原创 2024-04-23 23:04:21 · 327 阅读 · 0 评论 -
双指针算法,位运算,离散化
unique函数是去重,会把重复元素放到最后,返回的是 重复数字开始的位置。②lowbit(x),返回x的最后一位1的位置。return r + 1//映射到1,2 ...,n。①在两个序列中,一个指针指向一个序列,另一个指针指向另外一个序列。while(l < r)//找到第一个大于等于x的位置。原创 2024-04-20 12:54:07 · 864 阅读 · 0 评论 -
高精度算法:(有时间补充)
Ai-Bi-t(t表示上一位有没有借位,如果借位了,t=1,反之,t=0)数组第0位存放个位数。因为会有进位问题,在数组最后加上比较简单。要保证A>=B.如果反之的话,就计算B-A,去负号。这里的乘数是一个大整数乘以一个比较小的数。这里是把乘数 b看成一个数 ,就是一起乘。先从个位开始减,不够减的话就向前借位。如果存在负数,分情况讨论。一个高精度除以一个低精度。大整数存储都是一致的。原创 2024-04-17 15:14:56 · 216 阅读 · 0 评论 -
归并排序 c++语言
有两个指针·指向两个有序序列的开始位置(该位置就是该序列的最小值),设一个新数组去存储答案。再比较两个指针指向的数的大小,较小的作为两个序列合成的新序列的最小数。如果指针一的更小,则指针一向右移动,再比较指针一和指针二指向的数。如果此时,另一指针未指向最后位置,则从另一指针的位置开始直接放到新序列后面。①确定分界点:mid = ( l + r ) / 2;以整个数组的中间部分,分为左边和右边。2.时间复杂度:nlog(2)n;一共log(2)n层,每层O(n).(把两个有序序列合二为一)。原创 2024-04-15 17:24:55 · 180 阅读 · 0 评论