1122. Relative Sort Array

Given two arrays `arr1` and `arr2`, the elements of `arr2` are distinct, and all elements in `arr2` are also in `arr1`.

Sort the elements of `arr1` such that the relative ordering of items in `arr1` are the same as in `arr2`.  Elements that don't appear in `arr2` should be placed at the end of `arr1` in ascending order.

Example 1:

```Input: arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
Output: [2,2,2,1,4,3,3,9,6,7,19]
```

Constraints:

• `1 <= arr1.length, arr2.length <= 1000`
• `0 <= arr1[i], arr2[i] <= 1000`
• All the elements of `arr2` are distinct.
• Each `arr2[i]` is in `arr1`.

1122. Relative Sort Array
``````struct Solution;

use std::cmp::Ordering;
use std::collections::HashMap;

impl Solution {
fn relative_sort_array(mut arr1: Vec<i32>, arr2: Vec<i32>) -> Vec<i32> {
let mut hm: HashMap<i32, usize> = HashMap::new();
for (i, &v) in arr2.iter().enumerate() {
hm.insert(v, i);
}
arr1.sort_by(|a, b| match (hm.get(a), hm.get(b)) {
(Some(i), Some(j)) => i.cmp(j),
(Some(_), None) => Ordering::Less,
(None, Some(_)) => Ordering::Greater,
(None, None) => a.cmp(b),
});
arr1
}
}

#[test]
fn test() {
let arr1 = vec![2, 3, 1, 3, 2, 4, 6, 7, 9, 2, 19];
let arr2 = vec![2, 1, 4, 3, 9, 6];
let res = vec![2, 2, 2, 1, 4, 3, 3, 9, 6, 7, 19];
assert_eq!(Solution::relative_sort_array(arr1, arr2), res);
}
``````