• LeetCode-295 Find Median from Data Stream


    题目描述

    Median is the middle value in an ordered integer list. If the size of the list is even, there is no middle value. So the median is the mean of the two middle value.

    For example,

    [2,3,4], the median is 3

    [2,3], the median is (2 + 3) / 2 = 2.5

    Design a data structure that supports the following two operations:

    • void addNum(int num) - Add a integer number from the data stream to the data structure.
    • double findMedian() - Return the median of all elements so far.

    题目大意

    要求完成两个操作:插入数字,找到插入数字的中位数(若插入了偶数个数字,则中位数为中间两个数字的平均值)。

    示例

    E1

    addNum(1)
    addNum(2)
    findMedian() -> 1.5
    addNum(3) 
    findMedian() -> 2

    解题思路

    在每次插入的时候二分查找到应该插入的位置,使得所有数字保持有序。最后查找中位数的时候只需要输出中间的数字即可。

    复杂度分析

    时间复杂度:O(N*log(N))

    空间复杂度:O(N)

    代码

    class MedianFinder {
    public:
        /** initialize your data structure here. */
        MedianFinder() {
            
        }
        
        void addNum(int num) {
            if(nums.empty())
                nums.push_back(num);
            else {
                // 插入数字,使得所有数字有序排列
                nums.insert(lower_bound(nums.begin(), nums.end(), num), num);
            }
        }
        
        double findMedian() {
            int n = nums.size();
            // 访问中间的位置,需判断数字总数是否为偶数
            return n & 1 ? nums[n / 2] : (nums[n / 2 - 1] + nums[n / 2]) * 0.5;
        }
        
    private:
        vector<int> nums;
    };
    
    /**
     * Your MedianFinder object will be instantiated and called as such:
     * MedianFinder* obj = new MedianFinder();
     * obj->addNum(num);
     * double param_2 = obj->findMedian();
     */
  • 相关阅读:
    Android之判断某个服务是否正在运行的方法
    Service完全解析(转)
    详解Android动画之Frame Animation(转)
    android SDK 快速更新配置(转)
    浅析Android中的消息机制(转)
    android中handler用法总结
    InputStream重用技巧(利用ByteArrayOutputStream)
    IntelliJ IDEA使用总结篇
    JDK,JRE,JVM区别与联系-理解与概括
    Egret IDE中搜索,过滤文件,只搜索.ts
  • 原文地址:https://www.cnblogs.com/heyn1/p/11155965.html
Copyright © 2020-2023  润新知