## 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.
```

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 = 
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!;
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.