
<编程之美>
文章平均质量分 56
jiangyi711
这个作者很懒,什么都没留下…
展开
-
《编程之美》 : 寻找最大的K个数
用于解决类似:10亿个浮点数,找出当中最大的10000个之类的问题。《编程之美》上一共五种解法:解法一:利用选择排序和冒泡排序,这两者的复杂度都属O(N*K)解法二:和STL中的nth_element(first, nth, last)思路一样。首先在[first, last)上寻找一个阈值(可采用三点中值法),根据这个阈值将[first, last)分成两段,前一段所有值都小于等于(或大于等于)阈值,后一段所有数都大于等于(或小于等于)阈值。如果阈值所在的位置>nth,则说明第nth个数在前半段,否则nt原创 2010-08-16 03:38:00 · 877 阅读 · 0 评论 -
《编程之美》:最长公共子序列(串)
求最长公共子串有两种情况:1, 不要求子串连续,两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是它们的最长公共子串。2, 要求子串连续。对于上面两个串来说,BD和AB是它们的最长公共子串。一,有关连续的已经写过。设定一个矩阵p,p[i][j]表示以str[i]和str[j]结尾的子串的最大公共子串的长度。所以有递推式: / 0 if ip[i,j] = p[i-1,j-1]+1原创 2010-08-24 17:42:00 · 1231 阅读 · 1 评论 -
《编程之美》:整数的二进制表示中1的个数
题目:输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。解法一:循环移位。每次移位都与1进行与运算,如果结果为1,则该位为1。这种方法的复杂度为O(k),k为该数的二进制位数。解法二:令x = x&x-1。这个操作的目的是消除最右边的1,每消除一个1,计数器加一。当x为0,则结束统计。这种方法的复杂度取决于x的二进制表达中1的个数。原创 2010-08-25 01:53:00 · 1094 阅读 · 0 评论