LeetCode试炼之路之:数据流中的移动平均值(346)

Posted yaphse-19

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode试炼之路之:数据流中的移动平均值(346)相关的知识,希望对你有一定的参考价值。

Given a stream of integers and a window size, calculate the moving average of all integers in the sliding window.

For example,
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

给一个整数流和一个窗口,计算在给定大小的窗口里的数字的平均值。

解:

本题思路:
LinkedList.remove() 方法用于取出链表中的第一个值,并将其移除。
功能类似于 Queue.poll() 取出队列中第一支,并将其从队列中删除

每次传入新值的时候判断是否列表数量是否等于最大数量,如果是,则需要将最前面的一个值从列表中去除,然后塞入新值,然后用所有值求和除以当前列表值得数量,求得当前窗口中数字的平均值。

//保存当前窗口数字的总和
private double previousSum = 0.0;
//窗口的最大值
private int maxSize;
//链表用于保存当前窗口的值
private Queue<Integer> currentWindow;

public MovingAverage(int val){
    currentWindow = new LinkedList<Integer>();
    maxSize = val;
}

private double next(int val){
    double sum = 0;
    if(maxSize==currentWindow.size()){
        previousSum -= currentWindow.remove();
    }
    currentWindow.add(val);
    previousSum +=val;
    return previousSum/currentWindow.size();
}

以上是关于LeetCode试炼之路之:数据流中的移动平均值(346)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode试炼之路:墙与门(286)

LeetCode 剑指Offer II 041滑动窗口的平均值[滑动窗口] HERODING的LeetCode之路

⭐算法入门⭐《队列》简单02 —— LeetCode 346. 数据流中的移动平均值

LeetCode 1825 求出MK平均值Set 队列 HERODING的LeetCode之路

LeetCode 1825 求出MK平均值Set 队列 HERODING的LeetCode之路

LeetCode 346. Moving Average from Data Stream (数据流动中的移动平均值)