Dynamic median

Design a data type that supports insert in logarithmic time, find-the-median in constant time, and remove-the-median in logarithmic time.

public double getMedian(leftset, rightSet, input) { //其中左邊集合為比較小的元素集合,右邊集合為大的元素集合
        while((item = input.read()) != null) // 可以讀取到元素{
            if(item < leftSet.top) { // 如果小于左邊集合
                leftSet.insert(item);
            } else {
                rightSet.insert(item);  //將元素加入到右邊集合
            }
            // 判斷兩邊元素個(gè)數(shù)的差異,進(jìn)行調(diào)整
            if(leftSet.size() - rightSet.size() == 2) {  //如果左邊元素集合比右邊元素集合大2, 取頂元素加入到右邊
                  item = leftSet.remove();
                 rightSet.insert(item);
            }
            // 同樣應(yīng)用于右邊元素比左邊元素大2的情況
            if(rightSet.size() - leftSet.size() == 2) {  //如果右邊元素集合比左邊元素集合大2, 取頂元素加入到左邊
                  item = rightSet.remove();
                  leftSet.insert(item);
            }
        }
        // 在元素取完之后要判斷兩邊集合元素的情況
        if(leftSet.size() == rightSet.size()) {
            return (leftSet.top() + rightSet.top()) / 2;
        } else if(leftSet.size() > rightSet.size()) {
            return leftSet.top();
        } else
            return rightSet.top();
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容