1394. Find Lucky Integer in an Array

Given an array of integers arr, a lucky integer is an integer which has a frequency in the array equal to its value.

Return a lucky integer in the array. If there are multiple lucky integers return the largest of them. If there is no lucky integer return -1.

 

Example 1:

Input: arr = [2,2,3,4]
Output: 2
Explanation: The only lucky number in the array is 2 because frequency[2] == 2.

Example 2:

Input: arr = [1,2,2,3,3,3]
Output: 3
Explanation: 1, 2 and 3 are all lucky numbers, return the largest of them.

Example 3:

Input: arr = [2,2,2,3,3]
Output: -1
Explanation: There are no lucky numbers in the array.

Example 4:

Input: arr = [5]
Output: -1

Example 5:

Input: arr = [7,7,7,7,7,7,7]
Output: 7

 

Constraints:

  • 1 <= arr.length <= 500
  • 1 <= arr[i] <= 500

Rust Solution

struct Solution;
use std::collections::HashMap;

impl Solution {
    fn find_lucky(arr: Vec<i32>) -> i32 {
        let mut hm: HashMap<i32, i32> = HashMap::new();
        for x in arr {
            *hm.entry(x).or_default() += 1;
        }
        if let Some(x) = hm
            .into_iter()
            .filter_map(|(k, v)| if k == v { Some(k) } else { None })
            .max()
        {
            x
        } else {
            -1
        }
    }
}

#[test]
fn test() {
    let arr = vec![2, 2, 3, 4];
    let res = 2;
    assert_eq!(Solution::find_lucky(arr), res);
    let arr = vec![1, 2, 2, 3, 3, 3];
    let res = 3;
    assert_eq!(Solution::find_lucky(arr), res);
    let arr = vec![2, 2, 2, 3, 3];
    let res = -1;
    assert_eq!(Solution::find_lucky(arr), res);
    let arr = vec![5];
    let res = -1;
    assert_eq!(Solution::find_lucky(arr), res);
    let arr = vec![7, 7, 7, 7, 7, 7, 7];
    let res = 7;
    assert_eq!(Solution::find_lucky(arr), res);
}

Having problems with this solution? Click here to submit an issue on github.