sliding-window-max
v1.1.0
Published
[![chrvadala](https://img.shields.io/badge/website-chrvadala-orange.svg)](https://chrvadala.github.io) [![Test](https://github.com/chrvadala/sliding-window-max/workflows/Test/badge.svg)](https://github.com/chrvadala/sliding-window-max/actions) [![Coverage
Downloads
36
Readme
sliding-window-max
Given a stream of data, this algorithm returns (for every added value) the current max value.
It uses a strategy that:
- Stores at most a number of values defined by the window size
- Performs a rolling max calculation
Example
const SlidingWindowMax = require('sliding-window-max')
const windowSize = 3
const slidingWindowMax = new SlidingWindowMax(windowSize)
slidingWindowMax.add(0) // returns null
slidingWindowMax.add(5) // returns null
slidingWindowMax.add(10)// returns 10
slidingWindowMax.add(7) // returns 10
slidingWindowMax.add(8) // returns 10
slidingWindowMax.add(5) // returns 8
slidingWindowMax.add(3) // returns 8
slidingWindowMax.add(4) // returns 5
//etc ...
| VALUE | Max |
|--------------------------|-------|
| [0] 5 10 7 8 5 3 4 | null
|
| [0 5] 10 7 8 5 3 4 | null
|
| [0 5 10] 7 8 5 3 4 | 10 |
| 0 [5 10 7] 8 5 3 4 | 10 |
| 0 5 [10 7 8] 5 3 4 | 10 |
| 0 5 10 [7 8 5] 3 4 | 8 |
| 0 5 10 7 [8 5 3] 4 | 8 |
| 0 5 10 7 8 [5 3 4]| 5 |
|... | ... |
Reference
new SlidingWindowMax(windowSize, options)
|Param |Default |Description|
|---------------------|-------------------|-----------|
|windowSize |required | Defines how many values should be considered to calculate the max |
|options.comparator | (a, b) => b - a
| Override the custom comparator function
|options.waitFullRange| true | If false the functions returns the max value also if the window size hasn't been reached yet
add(value)
Evaluate a new value and returns the calculated max value
Credits
I made this algorithm starting from this code https://github.com/chihungyu1116/leetcode-javascript/blob/master/239%20Sliding%20Window%20Maximum.js. My requirements were a bit different. The leetcode algorithm requires that all the data are known before it starts. With sliding-window-max you can:
- evaluate the data as soon as they are produced
- evaluate big array using less memory
Changelog
- 0.x - Beta version
- 1.0 - First official version
- 1.1 - Migrates to gh-workflows; Upgrades deps
Contributors
- chrvadala (author)