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 剑指Offer II 041滑动窗口的平均值[滑动窗口] HERODING的LeetCode之路
⭐算法入门⭐《队列》简单02 —— LeetCode 346. 数据流中的移动平均值
LeetCode 1825 求出MK平均值Set 队列 HERODING的LeetCode之路