一、题目

给定一个整数数据流和一个窗口大小,根据该 滑动窗口 的大小,计算其所有整数的移动平均值。

示例:

MovingAverage m = new MovingAverage(3);
m.next(1) = 1
m.next(10) = (1 + 10) / 2
m.next(3) = (1 + 10 + 3) / 3
m.next(5) = (10 + 3 + 5) / 3

二、思路

就是一个滑动窗口的题目,即每次的next(val)操作都会在原来的基础上加入元素,并且将当前滑动窗口内的元素之和除以窗口大小,几个点要注意:

(1)窗口大小虽然给定k,但是不一定是除以k,因为可能当窗口内的元素小于k时。

(2)因为每次的next操作会基于原来的数据,并且后面需要剔除开头的元素,容易想到用队列的数据结构,即如果当队列大小超出k则循环剔除前面的元素,同时更重要的是将sum减去剔除的元素值。


三、代码

class MovingAverage {
    queue<int> q;
    int windowsize;
    int sum = 0;
public:
    /** Initialize your data structure here. */
    MovingAverage(int size) {
        windowsize = size;
    double next(int val) {
        sum += val;
        q.push(val);
        if(q.size() > windowsize){
            sum -= q.front();
            q.pop();//队头元素出队
        return sum / double(q.size());
                一维数组实验题:计算平均数、中位数和众数 在调查数据分析(Survey data analysis)中经常需要计算平均数、中位数和众数。用函数编程计算40个输入数据(是取值1—10之间的任意整数)的平
            
一维数组实验题:计算平均数、中位数和众数 在调查数据分析(Survey data analysis)中经常需要计算平均数、中位数和众数。用函数编程计算40个输入数据(是取值1—10之间的任意整数)的平
数据流中的中位数,我轻敌了
最近面试时候遇到一个非常有意思的hard题,面试官没让写代码让说思路,但放在正常应届生招聘那可能就要手撕了,在剑指offer的第41题和力扣【数据流中的中位数】。
CSDN博客专家,华为云云享专家,阿里云专家博主,51CTO专家博主,现为推荐算法工程师,研究领域为AI推荐算法、NLP、图神经网络等,发表EI会议论文一篇,CSDN博客访问量破100万。 CSDN博客id:山顶夕景 微信公众号:古道西风瘦码 知识星球:AI算法乐园