php資料流中第K大元素的計算方法

coyan發表於2021-09-11

php資料流中第K大元素的計算方法

設計一個找到資料流中第K大元素的類(class)。注意是排序後的第K大元素,不是第K個不同的元素。

計算方法

1、直接使用最小堆,堆的大小為 k,這樣保證空間佔用最小,最小堆的根節點是就是最小值,也是我們想要的結果。

2、php的spl標準庫是有最小堆這個庫,直接在程式碼中繼承SplMinHeap。

例項

class KthLargest extends SplMinHeap {
 
    /**
 
    * @param Integer $k
 
    * @param Integer[] $nums
 
    */
 
    static $nums;
 
    public $k;
 
    function __construct($k, $nums) {
 
        $this->k = $k;
 
        // 遍歷初始化陣列,分別插入堆中
 
        foreach ($nums as $v) {
 
            $this->add($v);
 
        }
 
    }
 
   
 
    /**
 
    * @param Integer $val
 
    * @return Integer
 
    */
 
    function add($val) {
 
       // 維持堆的大小為k,當堆還未滿時,插入資料。
 
        if ($this->count() < $this->k) {
 
            $this->insert($val);
 
        } elseif ($this->top() < $val) {
 
        // 當堆滿的時候,比較要插入元素和堆頂元素大小。大於堆頂的插入。堆頂移除。
 
            $this->extract();
 
            $this->insert($val);
 
        }
 
        return $this->top();
 
    }}
 
    /**
 
    * Your KthLargest object will be instantiated and called as such:
 
    * $obj = KthLargest($k, $nums);
 
    * $ret_1 = $obj->add($val);
 
    */

以上就是php資料流中第K大元素的計算方法,希望對大家有所幫助。更多php學習指路:

本文轉載於php中文網,如有侵犯聯絡作者修改。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2236/viewspace-2828951/,如需轉載,請註明出處,否則將追究法律責任。

相關文章