summaryrefslogtreecommitdiff
path: root/majority-element-ii/src/main.rs
blob: 34872a4ea6067945beb32e4c42a6206eacbcaaed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
fn main() {
    println!("Hello, world!");
    let tests = [
        vec![3,2,3],
        vec![1],
        vec![1,2]
    ];

    for test in tests {
        let result = Solution::majority_element(test.clone());
        println!("{test:?} is {result:?}");
    }
}

struct Solution;

use std::collections::HashMap;

impl Solution {
    pub fn majority_element(nums: Vec<i32>) -> Vec<i32> {
        let mut occurance: HashMap<&i32, i32> = HashMap::new();
        
        for num in &nums {
            occurance.entry(num).and_modify(|x| {*x += 1}).or_insert(0);
        }
        occurance.iter().filter(|(_, &occ)| occ >= nums.len() as i32 / 3).map(|(&&num,_)| num).collect()
    }
}