zoukankan      html  css  js  c++  java
  • 346. Moving Average from Data Stream数据窗口流中位数的数据结构设计

    [抄题]:

    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

     [暴力解法]:

    时间分析:

    空间分析:

    [奇葩输出条件]:

    [奇葩corner case]:

    [思维问题]:

    以为要分情况讨论除数,没有想数据结构

    [一句话思路]:

    用queue的动态长度避免分类讨论

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    1. queue刚满足等于时就应除,不够警惕,下次注意
    2. 动态计算时可以初始化为0,不能在方法中重置为0,下次注意

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    [总结]:

    [复杂度]:Time complexity: O(n) Space complexity: O(n)

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    API design的题就是在类中声明引用,在方法中和实际的对象发生连接

    1. queue的实现(具体对象)是linkedlist,都是一条,不难想象. queue用add也没事

    [关键模板化代码]:

    先说引用,再说对象

    Queue<Integer> q;
        int s;
        double sum;
        
        public MovingAverage(int size) {
            q = new LinkedList<Integer>();
            s = size;
            sum = 0;
        }

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

     [代码风格] :

    class MovingAverage {
    
        /** Initialize your data structure here. */
        Queue<Integer> q;
        int s;
        double sum;
        
        public MovingAverage(int size) {
            q = new LinkedList<Integer>();
            s = size;
            sum = 0;
        }
        
        public double next(int val) {
            //when the queue just equals the size, poll it out
            if (q.size() == s) {
                sum -= q.poll();   
            }
            q.add(val);
            sum += val;
            return sum / q.size();
        }
    }
    
    /**
     * Your MovingAverage object will be instantiated and called as such:
     * MovingAverage obj = new MovingAverage(size);
     * double param_1 = obj.next(val);
     */
    View Code
  • 相关阅读:
    谈谈目前书店里面的计算机书籍“含量”情况 发发看法
    注意:CSS中加入中文注释,会使.NET中样式丢失
    今天很是郁闷
    用周末的时间,通过BT终于把VS2005Team版下载下来啦~~~
    今天在网上找到了两个常用建模工具的下载地址 ,速度还不错
    C#下如何实现服务器+客户端的聊天程序
    CSS网页制作技巧:图片的自适应居中和兼容处理(转)
    SASS用法指南(转)
    CSS选择器学习小结
    JavaScript编写计算器《JavaScript王者归来》读书笔记1
  • 原文地址:https://www.cnblogs.com/immiao0319/p/8551716.html
Copyright © 2011-2022 走看看