데이터 흐름 슬라이딩 창 평균(LintCode 제목)

10172 단어 LintCode

배경.


네크라인 (LintCode) 의 제목은 자기가 하나 쓰고, 다른 사람의 것을 참조하여 하나 쓴다

자체 코드: 총 3686ms 소요

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;
        }
    }
   
}

다른 사람의 코드: 총 1732ms 소모

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%만 넘는) 아직 임무는 무겁고 갈 길은 먼 것 같아. 힘내, 소란아.

좋은 웹페이지 즐겨찾기