PHP 十萬數字不同數組取最大的5個 (經典面試題topK) (原)
阿新 • • 發佈:2019-04-20
... nbsp 思路 麻煩 slice 小數 復雜 大於 講解
$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-------------------------------------------------------------------------------
如果有發現錯誤的地方麻煩留言告知,讓我能及時修正喲 感謝~
PHP 十萬數字不同數組取最大的5個 (經典面試題topK) (原)