自然数/整数 - 関数 - 最小自由数 (最小除外数)

定義

自然数の部分集合 \(T\) について \[\mathrm{mex}~(T) := \min (\mathbb N \setminus T).\]

/// Natural Numbers - Minimal Exclusion number, mex
pub fn mex(xs: &Vec<usize>) -> usize {
    let mut memo = vec![false; xs.len() + 1];
    for &x in xs.iter() {
        memo[x] = true;
    }
    memo.iter().take_while(|&&b| b).count()
}

#[cfg(test)]
mod test_binom_modint {
    use crate::num::mex::*;

    #[test]
    fn it_works() {
        assert_eq!(mex(&vec![1, 2, 3]), 0);
        assert_eq!(mex(&vec![0, 2, 3]), 1);
        assert_eq!(mex(&vec![0, 1, 3]), 2);
    }
}