pub fn sliding_window_minimum<T>(a: &[T], window_width: usize) -> Vec<T>where
    T: Ord + Clone,
Expand description

window_width の区間すべてに対し最小値を求めます。

配列 a に対し次で定める配列 b を求めます。

  • a の長さ a.len()n とする
  • b[0]: min(a[0], a[1], ..., a[window_width - 1])
  • b[1]: min(a[1], a[2], ..., a[window_width])
  • b[n - window_width]: min(a[n - window_width], ..., a[n - 2], a[n - 1])

実装の参考資料

Panics

if window_width is zero or is greater than a.len().

Examples

use sliding_window::sliding_window_minimum;

let a = vec![4, 7, 7, 8, 5, 7, 6, 9, 9, 2, 8, 3];
let minimums = sliding_window_minimum(&a, 6);
assert_eq!(
    minimums,
    vec![
        4, // 4 7 7 8 5 7
        5, //   7 7 8 5 7 6
        5, //     7 8 5 7 6 9
        5, //       8 5 7 6 9 9
        2, //         5 7 6 9 9 2
        2, //           7 6 9 9 2 8
        2, //             6 9 9 2 8 3
    ]
);