题目:有很多无序的数,怎么选出最大的K个数?解法1:最简单、最直接--排序!没什么闪光点,而且数目规模大的话,数组装不下,编译不了。解法2:转化为寻找第K大的数(参考《算法设计与分析》中的线性选择算法),然后遍历。解法3:二分答案。设数组中最大的数为vmax,最小的数为vmin。那么,第K大的数必然在[vmin,vmax]中,不断二分这个区间的数值寻找答案。时间复杂度达到O(nlogn),当做拓展思路吧。while(r-l>bound) //可能是浮点数,边界bound是比任意2个数之差还要小的数。{ mid=(l+r)/2; if(calc(a,n,mid)>=k) //cal. Read More
posted @ 2013-08-09 18:03 icfnight Views(327) Comments(0) Diggs(0) Edit