BM48 数据流中的中位数

 数据流中的中位数_牛客题霸_牛客网 (nowcoder.com)

Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数 

几种类型强转:

  1. dynamic_cast:用于安全地将指针或引用转换成其继承层次中的其他类型。只能用于多态类型,即至少有一个虚函数的类。

  2. reinterpret_cast:用于进行底层的类型转换,即将一个指针转换成一个整数值或者将一个整数值转换成一个指针。由于该转换不会进行任何类型检查,因此使用时要非常谨慎。

  3. const_cast:用于去除对象的const属性,即将const类型转换成非const类型。该转换只能作用于指针或引用。

  4. static_cast:用于基本数据类型之间的转换,如将整数转换成浮点数、浮点数转换成整数、将指针或引用转换成不同的指针或引用类型等。它是最常用的转换方式之一。

 二分查找函数:

lower_bound返回一个迭代器,指向在[first,last)范围内的第一个大于或等于val的元素。

upper_bound返回一个迭代器,指向在[first,last)范围内的第一个大于val的元素。

(有目标值返回该元素在序列中位置,如果序列中不存在大于或等于目标值的元素,返回end()指针)

时间复杂度都是O(log n)

 "(sz >> 1)"表示计算sz除以2的结果,向下取整。即如果sz是偶数,结果为sz/2;如果sz是奇数,结果为(sz-1)/2

class Solution {
public:
    #define SCD static_cast<double>
    vector<int> v;
    void Insert(int num)
    {
        if (v.empty()) {
            v.push_back(num);
        }
        else {
            auto it = lower_bound(v.begin(), v.end(), num);
            v.insert(it, num);
        }
    }

    double GetMedian()
    { 
        int sz = v.size();
        if (sz & 1) { //检测一个数是否是奇数
            return SCD(v[sz >> 1]); //sz的二进制数向右移动一位,相当于返回2的整数部分 sz/2
        }
        else {
            return SCD(v[sz >> 1] + v[(sz - 1) >> 1]) / 2;
        }
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值