《编程之美》
BIG_GENERAL_DD
好好学习,天天向上.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
2.5 寻找最大的K个数
解法一: 假设元素的数量不大,用快排或堆排序都是不错选择,平均时间复杂度都是O(N*log N)。然后取出前K个,O(K)。总时间复杂度O(N*log N)+ O(K)=O(N* log N)。 当K=1,上述算法也是O(N* log N)的复杂度,而显然我们可以通过N-1次的比较和交换得到结果。上述算法对整个数组都进行了排序,而原题目只要求最大的K个数,并不需要前K个数有序,也不需要前K个数原创 2017-11-10 21:46:31 · 305 阅读 · 0 评论 -
2.6 精确表达浮点数
计算机中,使用float或double来存储小数是不能得到精确值的。如果希望得到精确结果,最好用分数形式来表示小数。有限小数或无限循环小数都可以转化为分数。 如: 0.9=9/10; 0.333(3)=1/3 (括号中的数字表示循环节) 当然一个小数可以用好几种分数形式来表示。如: 0.333(3)=1/3=3/9 给定一个有限小数或无限循环小数,能否以分母最小的分数形式来返回这个小数?如果原创 2017-11-11 14:53:28 · 565 阅读 · 0 评论 -
2.7 最大公约数问题
写一个程序,求两个正整数的最大公约数。如果两个正整数都很大,有什么简单算法? 例如,给定两个数 1100100210001,,10200021,求出其最大公约数。 分析 辗转相除法的原理,假设用f(x,y)表示x,y的最大公约数,取k=x/y, b=x%y,则 x=ky + b,如果一个数能够同时整除x和y,则必能同时整除b和y;而能够同时整除b和y的数也必能同时整除x和y,即x和y原创 2017-11-11 16:14:28 · 379 阅读 · 0 评论 -
2.1 求二进制数中1的个数
对于一个字节(8 bit)的无符号整形变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能高、 解法一:通过整形数据除法的特点,通过相除和判断余数的值来分析。 int count(BYTE v) { int num=0; while(v) { if(v % 2 ==1) { num++; } v=v/2; } return num; } 解法原创 2017-11-06 09:54:54 · 328 阅读 · 0 评论 -
2.2 不要被阶乘吓跑
1 给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3628800,N!的末尾有两个0。 分析:从”哪些数相乘能得到10“这个角度来考虑,问题变得简单。如果N!= K * 10^M,且K不能被10整除,那么N!末尾有M个0.再考虑对N!进行质因数分解,N!=2^X * 3^Y * 5^Z…,由于10 = 2*5,所以M只跟X和Z相关,每一对2和5相乘可以得到一个1原创 2017-11-06 12:33:02 · 252 阅读 · 0 评论 -
2.3 寻找发帖“水王”
水王发帖超过数目超过帖子总数的一半,你有一个当前论坛上所有帖子的列表,其中帖子作者ID也在表中,快速找到这个水王、 一、对所以的ID排序,然后扫描一遍排好序的ID列表,统计各个ID出现的次数。如果某个ID出现的次数超过总数的一半,那么就输出这个ID。这个算法的时间复杂度为O(N*log N +N)。 如果ID列表已经是有序的,还需要扫描一遍整个列表来统计各个ID出现的次数吗?原创 2017-11-06 15:13:31 · 314 阅读 · 0 评论 -
2.4 1的个数
给一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数。 例如:N=2,写下1,2.这样只出现了1个“1”。 N=12,写下1,2,3,4,5,6,7,8,9,10,11,12.这样,1的个数是5. 问题:(1)写一个函数f(N),返回1到N之间出现的“1”的个数,比如f(12)=5。(2)满足条件f(N)=N的最大的N是多少? 解法一: ULO原创 2017-11-06 16:06:29 · 292 阅读 · 0 评论
分享