【LeetCode346】数据流中的移动平均值

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

一、题目

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

示例:

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());
    }
};
相关文章
|
7月前
|
算法 C++
剑指offer(C++)-JZ41:数据流中的中位数(算法-排序)
剑指offer(C++)-JZ41:数据流中的中位数(算法-排序)
剑指offer(C++)-JZ41:数据流中的中位数(算法-排序)
|
4天前
|
人工智能 BI
经典问题之区间分组
经典问题之区间分组
|
4天前
R语言自定义两种统计量度:平均值和中位数,何时去使用?
R语言自定义两种统计量度:平均值和中位数,何时去使用?
|
7月前
|
算法 测试技术 C#
C++算法:数据流的中位数
C++算法:数据流的中位数
|
11月前
|
存储
剑指offer 42. 数据流中的中位数
剑指offer 42. 数据流中的中位数
31 0
|
数据挖掘
一维数组实验题:计算平均数、中位数和众数 在调查数据分析(Survey data analysis)中经常需要计算平均数、中位数和众数。用函数编程计算40个输入数据(是取值1—10之间的任意整数)的平
一维数组实验题:计算平均数、中位数和众数 在调查数据分析(Survey data analysis)中经常需要计算平均数、中位数和众数。用函数编程计算40个输入数据(是取值1—10之间的任意整数)的平
150 0
|
机器学习/深度学习 存储 人工智能
LOJ6285.数列分块入门 9(分块在线求区间众数)
LOJ6285.数列分块入门 9(分块在线求区间众数)
108 0
|
存储 算法 Java
数据流中的中位数,我轻敌了
最近面试时候遇到一个非常有意思的hard题,面试官没让写代码让说思路,但放在正常应届生招聘那可能就要手撕了,在剑指offer的第41题和力扣【数据流中的中位数】。
102 0
数据流中的中位数,我轻敌了
|
算法
【算法作业】实验二:给立方体排序的小明&&同时整除的数
【算法作业】实验二:给立方体排序的小明&&同时整除的数
100 0
【算法作业】实验二:给立方体排序的小明&&同时整除的数