![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程一点也不美
不吃芝麻醬
这个作者很懒,什么都没留下…
展开
-
淦编一点也不美. 寻找发帖“水王”
给定一个长为N的数组,数组中有一出现大于N/2次的数,要求快速找到该数。Thinking:暴力的方法可以对数组进行排序,然后依次统计数字出现的次数,最后再找到出现大于N/2次的数字,但这样效率低,时间复杂度可以达到O(N*logN+ N);或者可以先进行排序后,数组第N/2位置上的数字必定是所求数字,但时间复杂度受限于排序算法;因此我们希望有不用排序的简单方法,即每次删除两个不同的数字,因为所求的数字大于N/2个,所以重复操作后最后的数字必为所求数字。Code:void Find.原创 2020-11-07 21:37:07 · 61 阅读 · 0 评论 -
淦编一点也不美. 阶乘
Q1. 给定一个整数N,那么N的阶乘N!末尾有多少个0?例如:N = 10, N! = 362880, N!末尾有2个0。Q2.求N!的二进制表示中最低位1的位置。Q1 Thinking:对于N = 10 时,末尾0的个数就是N!可以整除几个10,而阶乘N = 2^x + 3^y + 5^z....,觉得末尾0个数的关键在于x和z的个数,即min(x, z),又因为在阶乘中2出现的概率要远大于5,所以实际上末尾0的个数为5。Q1 Code:void rear_num(int n){原创 2020-11-07 21:23:18 · 95 阅读 · 0 评论 -
淦编一点也不美. 求二进制数中1的个数
对于一个字节(8bit)的无符号整型变量,求其二进制表示中"1"的个数.Claim: 算法执行效率尽可能高Example:Input:[162]Output:[3]Thinking:M1: 比较暴力的方法,依次遍历每一个二进制位,判断该二进制是否为1。1. 依次对二进制数右移1位(等同除2操作);2.该数与1进行"与"操作后仅有0和1两种结果,最后一位为1则“与”运算结果为1.M2: 简化问题,判断二进制位只有1个1的做法,对二进制数01000, 0100..原创 2020-11-07 21:03:23 · 1458 阅读 · 0 评论