码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2019-12-12 14:56:35      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:for   最大   integer   list   数据   max   队列   出队   amp   

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试炼之路之(3):数据流中的移动平均值(346)

标签:for   最大   integer   list   数据   max   队列   出队   amp   

原文地址:https://www.cnblogs.com/yaphse-19/p/12026735.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!