PHP 十万数字不同数组取最大的5个 (经典面试题topK) (原)
作者:互联网
$arr = array(3,5,7,8,1,2,456,78,...101,2345,456);
类似上述数组,共有十万个元素,让我们取出TOP5,下面是我的解法,先上代码再讲解思路
function topk($arr) { //取十万数组的前五个元素组成升序数组 $result = sort(array_slice($arr,0,5)); for($i=5;$i<100000;$i++){ for($j=4;$j>=0;$j--){ if($result[$j]<$arr[$i]){ $result[$j] = $arr[$i]; unset($result[0]); } } } }
具体思路是,拿出前五个元素组成升序队列,将数组剩下的元素与该升序队列进行循环比较,若大于小数组任一元素,则替换该元素,并删除小数组最小的元素,这种处理方法复杂度最差的情况是这9555次循环里面每个元素与小数组每个元素都比较了5次,也就是最多是 5N
还有一种思路呢,是按冒泡排序,十万数字走五次,取最后五个元素就是数组的top5,复杂度是 5N
-----------------------------------------------END-------------------------------------------------------------------------------
如果有发现错误的地方麻烦留言告知,让我能及时修正哟 感谢~
标签:面试题,十万,复杂度,元素,arr,topK,数组,升序,PHP 来源: https://www.cnblogs.com/gyrgyr/p/10741789.html