编程之美 第2章 数字之魅——数字中的技巧(十四)
摘要:2.5 寻找最大的K个数题意:无序的不相等的N个数,选出其中最大的若干个数。看到这道题,笔者首先想到的就是堆排序,堆排序的特性使得其非常适合于这个问题。书中解法四用到的就是堆排序算法,这个算法只需要扫描数据一次,而且仅占用K个数的空间,其他算法都无以匹敌。大学的数据结构中都会讲到堆排序,其也是二分思想的一个经典应用。2.6 精确表达浮点数题意:给定一个有限小数,或者无限循环小数,求其分数表达形式。这道题使笔者想起了很早就学过的一个证明,即证明0.999999999……等于1。解此题的方法就是用了上面的证明的方法,具体的证明过程也不难,无非就是通过缩放的方法消去循环节。而有限的小数直接可以表示为
阅读全文
posted @
2012-11-05 19:57
罗辑
阅读(324)
推荐(1)
编程之美 第2章 数字之魅——数字中的技巧(十三)
摘要:2.3 寻找发帖“水王”题意:给N个数,其中某个数出现的次数超过一半,找出这个数。这道题目书中给出的解题思路是,在所有ID中,每次删除两个不同的ID,剩下的就是要求的ID。这个思想比较简单,但作者给出的代码策略很值得学习。代码维护一个具有相同元素的容器,由于元素相同,我们只需要用两个变量分别记录容器中元素的ID和个数。对于一个新需要考察的ID,若容器为空,则把这个元素加入容器,若不为空,则对比容器中ID和当前ID是否相等,相等则容器元素个数加1,不等则减1。对于扩展问题中,3个水王的情况,我们可以维护三个容器,思想还是一样的。首先考虑是否可以合并到容器中去,若合并不了,则说明这是一个和已有容器
阅读全文
posted @
2012-11-01 19:19
罗辑
阅读(230)
推荐(1)