Skip to content

Commit cf51b3c

Browse files
solves #346: Moving Average from data stream in java
1 parent f5726c1 commit cf51b3c

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@
293293
| 343 | [Integer Break](https://leetcode.com/problems/integer-break) | | |
294294
| 344 | [Reverse A String](https://leetcode.com/problems/reverse-string) | [![Java](assets/java.png)](src/ReverseString.java) [![Python](assets/python.png)](python/reverse_a_string.py) | |
295295
| 345 | [Reverse Vowels of A String](https://leetcode.com/problems/reverse-vowels-of-a-string) | [![Java](assets/java.png)](src/ReverseVowelsOfString.java) [![Python](assets/python.png)](python/reverse_vowels_of_a_string.py) | |
296-
| 346 | 🔒 [Moving Average From Data Stream](https://leetcode.com/problems/moving-average-from-data-stream) | | |
296+
| 346 | 🔒 [Moving Average From Data Stream](https://leetcode.com/problems/moving-average-from-data-stream) | [![Java](assets/java.png)](src/MovingAverageFromDataStream.java) | |
297297
| 347 | [Top K frequent Elements](https://leetcode.com/problems/top-k-frequent-elements) | | |
298298
| 348 | 🔒 [Design Tic-Tac-Toe](https://leetcode.com/problems/design-tic-tac-toe) | | |
299299
| 349 | [Intersection of 2 Arrays](https://leetcode.com/problems/intersection-of-two-arrays) | [![Java](assets/java.png)](src/IntersectionOfTwoArrays.java) [![Python](assets/python.png)](python/intersection_of_2_array.py) | |

src/MovingAverageFromDataStream.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// https://leetcode.com/problems/moving-average-from-data-stream
2+
// N: number of calls to next(), M: max window size
3+
// T: O(N)
4+
// S: O(M)
5+
6+
import java.util.LinkedList;
7+
import java.util.Queue;
8+
9+
public class MovingAverageFromDataStream {
10+
}
11+
12+
13+
class MovingAverage {
14+
final int windowSize;
15+
final Queue<Integer> queue = new LinkedList<>();
16+
double windowSum = 0;
17+
18+
// T: O(1)
19+
public MovingAverage(int size) {
20+
windowSize = size;
21+
}
22+
23+
// T: O(1)
24+
// S: O(1)
25+
public double next(int val) {
26+
queue.add(val);
27+
final int toRemove = (queue.size() > windowSize && !queue.isEmpty()) ? queue.poll() : 0;
28+
windowSum += val - toRemove;
29+
return windowSum / queue.size();
30+
}
31+
}

0 commit comments

Comments
 (0)