算法-题目
NaNa_yzj
这个作者很懒,什么都没留下…
展开
-
欧拉线性筛法(求质数)
欧拉筛法的基本思想 :在埃氏筛法的基础上,让每个合数只被它的最小质因子筛选一次,以达到不重复的目的。代码 :int prime[maxn];int visit[maxn];void Prime(){ mem(visit,0); mem(prime, 0); for (int i = 2;i <= maxn; i...转载 2019-03-07 21:47:49 · 1011 阅读 · 0 评论 -
n!末尾有多少个0问题
思路:任何数可以分解为几个质因子相乘,两个数相乘末尾为零,即质因子为2*5,我们可判断有多少个2和5,即0的个数为两者同时出现的个数,计算阶乘时显然2的个数多于5出现的次数(偶数都会出现2),所以我们只须计算所有数质因子5的个数。以1024!为例:1024 / 5 =204;//遍历一遍,每个数出现1个质因子为5的 个数为2041024 / 25 =40;//遍历一遍,每个数出现2个质...原创 2019-03-30 15:24:59 · 1153 阅读 · 0 评论 -
找出数组中出现次数超过一半的数
思路分析: 出现次数超过一半,可以直接排序 得到中间的数即为所求,时间复杂度为排序的复杂度O(nlogn)现在用一种时间复杂度为O(n)的方法:因为出现的次数超过一半,即剩下的数的个数的累计和都小于这个数的个数,我们用抵消原则,用这个数与其余数相抵消,剩下的那个数必然是所求。具体操作:取一个关键值key记录数组中出现的书,用value记录这个数出现的次数,遍历数组,如果和这个数字...原创 2019-03-23 20:50:35 · 940 阅读 · 0 评论 -
整型数组中,只有两个数出现一次,其余数出现两次,怎么找出这两个数
思路:当只有一个数出现一次,其余出现两次,可用异或(两个相等的数异或的结果为0),每个数的异或结果即为所求当有两个数出现一次,结果为这两个数异或的结果【位异或运算:(1^0)=1,(1^1)=0,(0^0)=0】我们可以根据异或结果进行以下分析:相同的数二进制每一位对应相等,所求两个不相等数的二进制数必存在对应位不同,异或的结果必是1,即异或结果的二进制数中为1的为所求两个数的差异位,不妨...原创 2019-03-24 16:21:06 · 896 阅读 · 0 评论 -
两个单向链表相交问题
两个链表相交有三种情况因为每个链表节点只能有一个指向后一个节点的指针,但可以有多个同时指向节点的指针,当有环存在时,必定在尾部。所以当两个链表相交时,一个有环,另一个必定有环,不可能存在一个有环,一个无环但相交的情况。思路:首先判断链表L1/L2是否是环,若L1与L2 都无,,则由第一种情况解决 ...原创 2019-04-02 16:59:20 · 674 阅读 · 0 评论 -
100层楼,用2个球,最坏几次测试找到该楼层
动态规划:记dp[i][j]为有i个球测量j次,最大的可测量楼层数,考虑第一次测量的楼层为k,有如下两种情况 1)如果球破了,就需要测量k下面(有k-2个需要测量)的楼层,此时dp[i][j]=dp[i-1][j-1]+1 >= k-1; ...原创 2019-04-08 15:57:10 · 1629 阅读 · 0 评论