rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

type Pair = (i32, usize);

impl Solution {
    fn majority_element(nums: Vec<i32>) -> Vec<i32> {
        let n = nums.len();
        let mut pairs: Vec<Pair> = vec![];
        for &x in &nums {
            if pairs.iter().any(|p| p.0 == x) {
                pairs = pairs
                    .into_iter()
                    .map(|p| (p.0, if p.0 == x { p.1 + 1 } else { p.1 }))
                    .collect();
            } else {
                if pairs.len() < 2 {
                    pairs.push((x, 1));
                } else {
                    pairs = pairs.into_iter().map(|p| (p.0, p.1 - 1)).collect();
                    pairs = pairs.into_iter().filter(|p| p.1 > 0).collect();
                }
            }
        }
        let mut res = vec![];
        for pair in pairs {
            let sum = nums
                .iter()
                .fold(0, |acc, &x| if x == pair.0 { acc + 1 } else { acc });
            if sum > n / 3 {
                res.push(pair.0);
            }
        }
        res
    }
}

#[test]
fn test() {
    let nums = vec![3, 2, 3];
    let res = vec![3];
    assert_eq!(Solution::majority_element(nums), res);
    let nums = vec![1, 1, 1, 3, 3, 2, 2, 2];
    let res = vec![1, 2];
    assert_eq!(Solution::majority_element(nums), res);
}