题解 | #数据流中的中位数#

数据流中的中位数

https://www.nowcoder.com/practice/9be0172896bd43948f8a32fb954e1be1

class Solution {
public:
    // 记录输入流
    vector<int> val;
    void Insert(int num) {
        if(val.empty()) 
            val.push_back(num); // val中没有数据,直接加入
        // val中有数据,需要插入排序
        else{
            int i = 0;
            for(; i < val.size(); ++i){
                if(num <= val[i]) break;
            }
            val.insert(val.begin() + i, num);   // 插入排序
        }
    }

    double GetMedian() { 
        int n = val.size();
        // 奇数个数字
        if(n % 2 == 1){
            return double(val[n / 2]);
        }
        // 偶数个数字
        else{
            // 注意不能写成 double a = (val[n / 2] + val[n / 2 - 1]) / 2;这种形式,
            // (val[n / 2] + val[n / 2 - 1]) / 2; 会先进行整型int的除法(自动抹掉小数),然后把结果转成double,
            double a = val[n / 2];
            double b = val[n / 2 - 1];
            return (a + b) / 2;
        }
    }
};

vector容器中有插入排序方法,val.insert(iterator, element),这是我没想到的~~~

全部评论

相关推荐

牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务