rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

impl Solution {
    fn min_available_duration(
        mut slots1: Vec<Vec<i32>>,
        mut slots2: Vec<Vec<i32>>,
        duration: i32,
    ) -> Vec<i32> {
        slots1.sort_unstable_by_key(|v| v[0]);
        slots2.sort_unstable_by_key(|v| v[0]);
        let n = slots1.len();
        let m = slots2.len();
        let mut i = 0;
        let mut j = 0;
        while i < n && j < m {
            let s1 = &slots1[i];
            let s2 = &slots2[j];
            if s1[1] < s2[0] {
                i += 1;
                continue;
            }
            if s2[1] < s1[0] {
                j += 1;
                continue;
            }
            let start = s1[0].max(s2[0]);
            let end = s1[1].min(s2[1]);
            if end - start >= duration {
                return vec![start, start + duration];
            } else {
                if s1[0] < s2[0] {
                    i += 1;
                } else {
                    j += 1;
                }
            }
        }
        vec![]
    }
}

#[test]
fn test() {
    let slots1 = vec_vec_i32![[10, 50], [60, 120], [140, 210]];
    let slots2 = vec_vec_i32![[0, 15], [60, 70]];
    let duration = 8;
    let res = vec![60, 68];
    assert_eq!(
        Solution::min_available_duration(slots1, slots2, duration),
        res
    );
    let slots1 = vec_vec_i32![[10, 50], [60, 120], [140, 210]];
    let slots2 = vec_vec_i32![[0, 15], [60, 70]];
    let duration = 12;
    let res = vec![];
    assert_eq!(
        Solution::min_available_duration(slots1, slots2, duration),
        res
    );
}