
每日一题
Whitegost
这个作者很懒,什么都没留下…
展开
-
二叉堆
堆的定义堆是完全二叉树,可以看做一棵树,堆中任意节点的值总是不大于(或不小于)其子节点的值,所以堆的顶端一定是最大的(或最小的)。堆一般分为小根堆和大根堆。堆的顶端是最小,任意一个节点不大于其子节点的堆叫做小根堆,反之大根堆的堆顶端是最大的。除了二叉堆,常见的堆还有左倾堆,斜堆,二项堆,斐波那契堆等。二叉堆的定义二叉堆分为两种:最大堆和最小堆。最大堆:父节点的值总是大于或等于任何一个子节点...原创 2020-02-06 20:46:31 · 142 阅读 · 0 评论 -
快速乘
快速乘计算ab%mod,直接计算ab,如果a和b都是long long int类型就会溢出,快速乘就能保证ab不会溢出1234213用小学乘法列竖式:1234213=12343+1234101+12341002转化为二进制10101×101= 10101 * 1 + 10101 * 2 * 1 + 10101 * 2^2 * 0 + 10101 * 2^3 * 1因为转化为二进制后,...原创 2020-02-06 16:51:01 · 185 阅读 · 0 评论 -
单调栈
单调栈单调栈是一个单调递增或单调递减的栈,可以用来找到从左或从右遍历,比它更大或更小的元素的位置。单调栈的入栈和出栈假如 5 6 9 7 2,从左到右依次入栈,此栈为单调递赠的栈,如果栈为空或者入栈元素小于栈顶元素。5入栈时,栈为空,入栈,栈内元素为106入栈时,栈顶元素5比6小,则5出栈,6入栈,栈内69入栈时,栈顶元素6比9大,则9入栈,栈内元素6,97入栈时,栈顶元素9比7小,...原创 2020-02-02 21:35:21 · 158 阅读 · 0 评论 -
字符串哈希
字符串Hash字符串hash就是把一个字符串变成一个整数当两个字符串相同时,它们通过hash计算后得到的整数相同,当两个字符串不同时,它们的数字就不同。Hash公式首先设一个进制数base,和一个取模数mod给定一个字符串Sid(x)=x - ‘a’ + 1*hash[ i ] =hash[ i -1 ] base + id(s[ i ])hash冲突比如orzc的哈希值为233...原创 2020-02-01 21:14:38 · 463 阅读 · 0 评论 -
并查集
并查集并查集算法实际上是找不相交的集合的算法。例如:有n个人,m种关系,如果a认识b,b认识c,那么a能通过b认识c,最后能有几个朋友圈。刚开始时,每个人都是独立的,假如有总共有五个人,建立一个一维数组s[6](需要进行初始化),s[1]~s[5]分别表示这五个人,数组的下标分别代表他们朋友圈中的那个“boss”,通过给出的关系,来合并朋友圈。假设每个人最开始的“boss”是自己,s[1]...原创 2020-01-23 19:46:33 · 220 阅读 · 0 评论 -
归并排序
归并排序的优点相比于冒泡排序,归并排序的效率更高,它的效率为O(nlogn),而且比起快速排序,归并排序更加稳定。归并排序的原理要将一组乱序的数字排列成有序,用归并来思考,就是分治,即大化小,化为最小的有序数字,即只有一个数字时,合并到上一步,将小化大。步骤为下面的GIF:用更加清楚的图表现它:简而言之,就是将小的子序列排序为有序序列合并,这样就没有冒泡的反复比较大小交换的过程,效率...原创 2020-01-19 18:24:28 · 247 阅读 · 1 评论 -
尺取算法
尺取的用途尺取一般用来选取有一定规律的区间,对一定区间先判断是否符合条件后,再将这个区间推进。尺取算法尺取算法就像毛毛虫,一伸一缩的取区间,找到问题的答案。例如:给长度为n的数组和一个整数m,求总和不小于m的连续子序列的最小长度输入n = 10,m = 155 1 3 5 10 7 4 9 2 8输出2首先找到一个满足条件(总和不小于m)的子序列,再往后推进。找出满足条件的长...原创 2020-01-18 19:43:18 · 909 阅读 · 0 评论 -
快速幂和快速幂取模
快速幂朴素算法求幂使用for循环一直累乘得到结果,代码如下:int pow(int a,int b){ int i,ans=1; for(i=1;i<=b;i++) { ans=ans*a; } return ans;}该算法的时间复杂度为O(n),而有一种更快速的算法——快速幂,时间复杂度为O(logn)能更快的计算出a...原创 2020-01-17 16:18:35 · 178 阅读 · 0 评论