数据流滑动窗口平均值(LintCode题目)

背景

领扣(LintCode)的题目,自己写一个 ,参照其他人的写一个

自己的代码: 总耗时 3686 ms

public class MovingAverage {
    private int size;
    private Queue<Integer> queue;
    /*
    * @param size: An integer
    */public MovingAverage(int size) {
        // do intialization if necessary
        this.size=size;
        queue=new ArrayDeque(size);
    }

    /*
     * @param val: An integer
     * @return:  
     */
    public double next(int val) {
        // write your code here
        int length;
        double result=0.00000;
        if((length=queue.size())==size){//判断队列是否已满
            queue.poll();
            queue.add(val);
            Iterator iterator=queue.iterator();
            while(iterator.hasNext()){
                result+=(Integer)iterator.next();
                }
            return result/length;
        }else{
            queue.add(val);
            length=queue.size();
            Iterator iterator=queue.iterator();
            while(iterator.hasNext()){
                result+=(Integer)iterator.next();
            }
           return result/length;
        }
    }
   
}

别人的代码:总耗时 1732 ms

public class MovingAverage {
    private final int maxSize;
    private final Queue<Integer> window;
    private long sum = 0;
    
    public MovingAverage(int maxSize) {
        this.maxSize = maxSize;
        this.window = new ArrayDeque<>(maxSize + 1);
    }

    public double next(int val) {
        window.add(val);
        sum += val;
        if (window.size() > maxSize) {
            sum -= window.poll();
        }
        return (double) sum / window.size();
    }
}

感悟

这就是差距吗,笑哭。。。。。
而且这个还不是最好的。。(只超过60%的人)
看来自己还是任重而道远,加油吧,骚年

你可能感兴趣的:(LintCode)