1346. Check If N and Its Double Exist

Given an array `arr` of integers, check if there exists two integers `N` and `M` such that `N` is the double of `M` ( i.e. `N = 2 * M`).

More formally check if there exists two indices `i` and `j` such that :

• `i != j`
• `0 <= i, j < arr.length`
• `arr[i] == 2 * arr[j]`

Example 1:

```Input: arr = [10,2,5,3]
Output: true
Explanation: N` = 10` is the double of M` = 5`,that is, `10 = 2 * 5`.
```

Example 2:

```Input: arr = [7,1,14,11]
Output: true
Explanation: N` = 14` is the double of M` = 7`,that is, `14 = 2 * 7`.
```

Example 3:

```Input: arr = [3,1,7,11]
Output: false
Explanation: In this case does not exist N and M, such that N = 2 * M.
```

Constraints:

• `2 <= arr.length <= 500`
• `-10^3 <= arr[i] <= 10^3`

1346. Check If N and Its Double Exist
``````struct Solution;
use std::collections::HashSet;

impl Solution {
fn check_if_exist(arr: Vec<i32>) -> bool {
let mut hs: HashSet<i32> = HashSet::new();
let mut zero = 0;
for &x in &arr {
if x == 0 {
if zero > 0 {
return true;
} else {
zero += 1;
}
} else {
hs.insert(x);
}
}
for x in arr {
if hs.contains(&(2 * x)) {
return true;
}
}
false
}
}

#[test]
fn test() {
let arr = vec![10, 2, 5, 3];
let res = true;
assert_eq!(Solution::check_if_exist(arr), res);
let arr = vec![7, 1, 14, 11];
let res = true;
assert_eq!(Solution::check_if_exist(arr), res);
let arr = vec![3, 1, 7, 11];
let res = false;
assert_eq!(Solution::check_if_exist(arr), res);
let arr = vec![-2, 0, 10, -19, 4, 6, -8];
let res = false;
assert_eq!(Solution::check_if_exist(arr), res);
}
``````