美文网首页
【教3妹学算法-每日3题(1)】滑动窗口的平均值

【教3妹学算法-每日3题(1)】滑动窗口的平均值

作者: 程序员小2 | 来源:发表于2022-07-17 11:29 被阅读0次

    插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
    坚持不懈,越努力越幸运,大家一起学习鸭~~~

    3妹

    3妹:早啊, 2哥
    2哥:3妹今天怎么这么开心
    3妹:因为今天是周五啊, 每个周五我都会很开心, 因为明后天就不用上班了呀。
    2哥:晚上去看电影怎么样。
    3妹:可以的, 看喜剧片吗?
    2哥:我无所谓, 哪怕不看喜剧片,想到明天不用上班,也能看出喜剧片的效果,哈哈。
    3妹:ok, 晚上见, 我要去上班啦。
    2哥:别忘记通勤路上看看算法题,不能偷懒哈。

    讲课

    题目:

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

    实现 MovingAverage 类:

    MovingAverage(int size) 用窗口大小 size 初始化对象。
    double next(int val) 成员函数 next 每次调用的时候都会往滑动窗口增加一个整数,请计算并返回数据流中最后 size 个值的移动平均值,即滑动窗口里所有数字的平均值。

    示例:

    输入:
    inputs = ["MovingAverage", "next", "next", "next", "next"]
    inputs = [[3], [1], [10], [3], [5]]
    输出:
    [null, 1.0, 5.5, 4.66667, 6.0]

    解释:
    MovingAverage movingAverage = new MovingAverage(3);
    movingAverage.next(1); // 返回 1.0 = 1 / 1
    movingAverage.next(10); // 返回 5.5 = (1 + 10) / 2
    movingAverage.next(3); // 返回 4.66667 = (1 + 10 + 3) / 3
    movingAverage.next(5); // 返回 6.0 = (10 + 3 + 5) / 3

    提示:

    1 <= size <= 1000
    -105 <= val <= 105
    最多调用 next 方法 104 次

    java代码:

    class MovingAverage {
        Queue<Integer> queue;
        int size;
        double sum;
    
        public MovingAverage(int size) {
            queue = new ArrayDeque<Integer>();
            this.size = size;
            sum = 0;
        }
    
        public double next(int val) {
            if (queue.size() == size) {
                sum -= queue.poll();
            }
            queue.offer(val);
            sum += val;
            return sum / queue.size();
        }
    }
    
    
    

    相关文章

      网友评论

          本文标题:【教3妹学算法-每日3题(1)】滑动窗口的平均值

          本文链接:https://www.haomeiwen.com/subject/umnhirtx.html