rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

impl Solution {
    fn num_moves_stones_ii(mut stones: Vec<i32>) -> Vec<i32> {
        stones.sort_unstable();
        let n = stones.len();
        let mut min = n as i32;
        let mut max = 0;
        max = max.max(stones[n - 1] - stones[1] + 1 - n as i32 + 1);
        max = max.max(stones[n - 2] - stones[0] + 1 - n as i32 + 1);
        let mut l = 0;
        for r in 0..n {
            while stones[r] - stones[l] + 1 > n as i32 {
                l += 1;
            }
            let d = r - l + 1;
            if d == n - 1 && stones[r] - stones[l] + 1 == n as i32 - 1 {
                min = min.min(2);
            } else {
                min = min.min((n - d) as i32);
            }
        }
        vec![min, max]
    }
}

#[test]
fn test() {
    let stones = vec![7, 4, 9];
    let res = vec![1, 2];
    assert_eq!(Solution::num_moves_stones_ii(stones), res);
    let stones = vec![6, 5, 4, 3, 10];
    let res = vec![2, 3];
    assert_eq!(Solution::num_moves_stones_ii(stones), res);
    let stones = vec![100, 101, 104, 102, 103];
    let res = vec![0, 0];
    assert_eq!(Solution::num_moves_stones_ii(stones), res);
}