822. Card Flipping Game

On a table are `N` cards, with a positive integer printed on the front and back of each card (possibly different).

We flip any number of cards, and after we choose one card.

If the number `X` on the back of the chosen card is not on the front of any card, then this number X is good.

What is the smallest number that is good?  If no number is good, output `0`.

Here, `fronts[i]` and `backs[i]` represent the number on the front and back of card `i`

A flip swaps the front and back numbers, so the value on the front is now on the back and vice versa.

Example:

```Input: fronts = [1,2,4,4,7], backs = [1,3,4,1,3]
Output: `2`
Explanation: If we flip the second card, the fronts are `[1,3,4,4,7]` and the backs are `[1,2,4,1,3]`.
We choose the second card, which has number 2 on the back, and it isn't on the front of any card, so `2` is good.```

Note:

1. `1 <= fronts.length == backs.length <= 1000`.
2. `1 <= fronts[i] <= 2000`.
3. `1 <= backs[i] <= 2000`.

822. Card Flipping Game
``````struct Solution;
use std::collections::HashSet;

impl Solution {
fn flipgame(fronts: Vec<i32>, backs: Vec<i32>) -> i32 {
let n = fronts.len();
let mut hs: HashSet<i32> = HashSet::new();
let mut res = std::i32::MAX;
for i in 0..n {
if fronts[i] == backs[i] {
hs.insert(fronts[i]);
}
}
for i in 0..n {
if !hs.contains(&fronts[i]) {
res = res.min(fronts[i]);
}
if !hs.contains(&backs[i]) {
res = res.min(backs[i]);
}
}
if res == std::i32::MAX {
0
} else {
res
}
}
}

#[test]
fn test() {
let fronts = vec![1, 2, 4, 4, 7];
let backs = vec![1, 3, 4, 1, 3];
let res = 2;
assert_eq!(Solution::flipgame(fronts, backs), res);
}
``````