[LeetCode] 346. Moving Average from Data Stream ??????????????????????????????
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode] 346. Moving Average from Data Stream ??????????????????????????????相关的知识,希望对你有一定的参考价值。
?????????size control ?????? head 1.0 you time public pytho
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
?????????????????????????????????????????????????????????????????????????????????????????????
???????????????queue????????????queue??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????queue???????????????????????????????????????
Java:
public class MovingAverage { private double previousSum = 0.0; private int maxSize; private Queue<Integer> currentWindow; /** Initialize your data structure here. */ public MovingAverage(int size) { currentWindow = new LinkedList<Integer>(); maxSize = size; } public double next(int val) { if(currentWindow.size()==maxSize){ previousSum -= currentWindow.remove(); } currentWindow.add(val); previousSum += val; return previousSum/currentWindow.size(); } } /** * Your MovingAverage object will be instantiated and called as such: * MovingAverage obj = new MovingAverage(size); * double param_1 = obj.next(val); */??????
Java:
public class MovingAverage { LinkedList<Integer> queue; int size; double avg; /** Initialize your data structure here. */ public MovingAverage(int size) { this.queue = new LinkedList<Integer>(); this.size = size; } public double next(int val) { if(queue.size()<this.size){ queue.offer(val); int sum=0; for(int i: queue){ sum+=i; } avg = (double)sum/queue.size(); return avg; }else{ int head = queue.poll(); double minus = (double)head/this.size; queue.offer(val); double add = (double)val/this.size; avg = avg + add - minus; return avg; } } }??????
Python:
# Time: O(1) # Space: O(w) from collections import deque class MovingAverage(object): def __init__(self, size): """ Initialize your data structure here. :type size: int """ self.__size = size self.__sum = 0 self.__q = deque([]) def next(self, val): """ :type val: int :rtype: float """ if len(self.__q) == self.__size: self.__sum -= self.__q.popleft() self.__sum += val self.__q.append(val) return 1.0 * self.__sum / len(self.__q) # Your MovingAverage object will be instantiated and called as such: # obj = MovingAverage(size) # param_1 = obj.next(val)??????
C++:
class MovingAverage { public: MovingAverage(int size) { this->size = size; sum = 0; } double next(int val) { if (q.size() >= size) { sum -= q.front(); q.pop(); } q.push(val); sum += val; return sum / q.size(); } private: queue<int> q; int size; double sum; };
??????
以上是关于[LeetCode] 346. Moving Average from Data Stream ??????????????????????????????的主要内容,如果未能解决你的问题,请参考以下文章
[leetcode]346. Moving Average from Data Stream滑动窗口平均值
LeetCode 346. Moving Average from Data Stream (数据流动中的移动平均值)
346. Moving Average from Data Stream - Easy
[LeetCode] 1033. Moving Stones Until Consecutive