1. 程式人生 > >PHP 十萬數字不同數組取最大的5個 (經典面試題topK) (原)

PHP 十萬數字不同數組取最大的5個 (經典面試題topK) (原)

... 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) (原)