Crates.io | moving_min_max |
lib.rs | moving_min_max |
version | 1.3.0 |
source | src |
created_at | 2020-01-15 20:59:49.69631 |
updated_at | 2020-07-04 03:29:57.976928 |
description | Tracking minimum or maximum of sliding windows. |
homepage | https://github.com/spebern/moving_min_max |
repository | https://github.com/spebern/moving_min_max |
max_upload_size | |
id | 198847 |
size | 13,808 |
Keep track of the minimum or maximum value in a sliding window.
moving min max
provides one data structure for keeping track of the
minimum value and one for keeping track of the maximum value in a sliding
window.
The algorithm is based on the description here.
The complexity of the operations are
use moving_min_max::MovingMin;
let mut moving_min = MovingMin::<i32>::new();
moving_min.push(2);
moving_min.push(1);
moving_min.push(3);
assert_eq!(moving_min.min(), Some(&1));
assert_eq!(moving_min.pop(), Some(2));
assert_eq!(moving_min.min(), Some(&1));
assert_eq!(moving_min.pop(), Some(1));
assert_eq!(moving_min.min(), Some(&3));
assert_eq!(moving_min.pop(), Some(3));
assert_eq!(moving_min.min(), None);
assert_eq!(moving_min.pop(), None);
or
use moving_min_max::MovingMax;
let mut moving_max = MovingMax::<i32>::new();
moving_max.push(2);
moving_max.push(3);
moving_max.push(1);
assert_eq!(moving_max.max(), Some(&3));
assert_eq!(moving_max.pop(), Some(2));
assert_eq!(moving_max.max(), Some(&3));
assert_eq!(moving_max.pop(), Some(3));
assert_eq!(moving_max.max(), Some(&1));
assert_eq!(moving_max.pop(), Some(1));
assert_eq!(moving_max.max(), None);
assert_eq!(moving_max.pop(), None);