Picking Numbers

  • + 0 comments

    Rust best solution

    If you’re looking for solutions to the 3-month preparation kit in either Python or Rust, you can find them below: my solutions

    fn picking_numbers(a: &[i32]) -> i32 {
        //Time complexity: O(n)
        //Space complexity (ignoring input): O(n)
        //You don't need to check for value-1 cases, because that is already checked by the value
        //itself + 1
        let mut a_dict = std::collections::HashMap::new();
    
        for &value in a {
            match a_dict.get(&value) {
                Some(f) => a_dict.insert(value, f + 1),
                None => a_dict.insert(value, 1),
            };
        }
    
        let mut longest_subsequence_len = 0;
        let mut current_subsequence_len = 0;
        for (value, frequency) in a_dict.iter() {
            let plus_len = *a_dict.get(&(*value + 1)).unwrap_or(&0);
    
            current_subsequence_len = frequency + plus_len;
            if current_subsequence_len > longest_subsequence_len {
                longest_subsequence_len = current_subsequence_len
            }
        }
    
        longest_subsequence_len
    }