美文网首页
Dynamic median

Dynamic median

作者: 一叶夏幕 | 来源:发表于2019-03-09 15:31 被阅读0次

    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);  //将元素加入到右边集合
                }
                // 判断两边元素个数的差异,进行调整
                if(leftSet.size() - rightSet.size() == 2) {  //如果左边元素集合比右边元素集合大2, 取顶元素加入到右边
                      item = leftSet.remove();
                     rightSet.insert(item);
                }
                // 同样应用于右边元素比左边元素大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();
        }
    

    相关文章

      网友评论

          本文标题:Dynamic median

          本文链接:https://www.haomeiwen.com/subject/fcnspqtx.html