背景
领扣(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%的人)
看来自己还是任重而道远,加油吧,骚年