摘要: n&(n-1) n&(-n)n&(n-1)作用:将n的二进制表示中的最低位为1的改为0,先看一个简单的例子:n = 10100(二进制),则(n-1) = 10011 ==》n&(n-1) = 10000可以看到原本最低位为1的那位变为0。弄明白了n&(n-1)的作用,那它有哪些应用?1. 求某一... 阅读全文
posted @ 2014-10-28 17:06 juandx 阅读(1848) 评论(0) 推荐(3) 编辑
摘要: 在n!中末尾有几个0取决于n!中5的个数(2肯定比5多)所以遍历从1到n的数,看总共有几个5即可for i in 1..N do j = i; while(j % 5 == 0) ++ret; j /= 5; endend有个nb的方法:z = [N... 阅读全文
posted @ 2014-10-28 16:41 juandx 阅读(955) 评论(0) 推荐(0) 编辑
摘要: 1、100!有多少位要计算n!的位数,很容易嘛:X=log10(n!)=log10(1)+log10(2)+log10(3)+……+log10(n-1)+log10(n);然后对X取整,再加1,n!的位数了!计算得到:100阶乘位数是:158100!=933262154439441526816992... 阅读全文
posted @ 2014-10-28 16:23 juandx 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 1、排序后去出前k个,o(n*log(n)) 如果kk,说明只要继续在大的部分找就可以了, 如果大的部分的个数 delta){ midv = minv + (maxv - minv)*0.5; if(f(a,N,midv) >... 阅读全文
posted @ 2014-10-28 16:06 juandx 阅读(1253) 评论(0) 推荐(0) 编辑
摘要: 先有一个概念:部分和:ps[i][j]表示从(0,0)到(i,j)这个矩形的和,那么有ps[i][j] = ps[i-1][j]+ps[i][j-1]-ps[i-1][j-1]+a[i][j],从而可以在o(m*n)的时间内求出ps这样有了ps后,就可以在o(1)时间内求出(i,j)到(p,q)这个... 阅读全文
posted @ 2014-10-28 15:16 juandx 阅读(216) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/jackge/archive/2013/04/22/3034968.html有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把... 阅读全文
posted @ 2014-10-28 14:20 juandx 阅读(422) 评论(0) 推荐(0) 编辑
摘要: 要知道,最大和最小是相对的,用总和减去最小的就能得到最大的。 编程之美的题目没看懂,然后参考了http://zhangpeizhen.blog.163.com/blog/static/231873112201431784024921/两种情况1、普通数组,可以o(n)求最大子串和。2、如果是环状... 阅读全文
posted @ 2014-10-28 14:05 juandx 阅读(493) 评论(0) 推荐(0) 编辑
摘要: [-2,2,3,-1]的最大字段和是[2,3]/*动态规划算法:**b[j]=max{a[i]+ +a[j]},10时b[j]=b[j-1]+a[j],否则b[j]=a[j]。故b[j]的动态规划递归式为:**b[j]=max(b[j-1]+a[j],a[j]),10) b+=... 阅读全文
posted @ 2014-10-28 01:55 juandx 阅读(275) 评论(0) 推荐(0) 编辑
摘要: n^2的解法对于a[i]来说,j in 0..i-1,如果a[i]>a[j],则dp[i] = dp[j]+1,否则dp[i]至少为1For i in 0..n For j in 0..i-1 If(a[i] > a[j]) dp[i] = max(dp[i],dp[j]+1); dp[i... 阅读全文
posted @ 2014-10-28 01:48 juandx 阅读(1465) 评论(0) 推荐(0) 编辑