1306 Minimum Absolute Difference
1306 Minimum Absolute Difference
Minimum Absolute Difference 
Given an array of distinct integers arr, find all pairs of elements with the minimum absolute difference of any two elements.
Return a list of pairs in ascending order(with respect to pairs), each pair [a, b] follows
1
2
3
a, b are from arr
a < b
b - a equals to the minimum absolute difference of any two elements in arr
Example 1:
1
2
3
4
**Input:** arr = [4,2,1,3]
**Output:** [[1,2],[2,3],[3,4]]
**Explanation: **The minimum absolute difference is 1. List all pairs with difference equal to 1 in ascending order.
Example 2:
1
2
3
4
**Input:** arr = [1,3,6,10,15]
**Output:** [[1,3]]
Example 3:
1
2
3
4
**Input:** arr = [3,8,-10,23,19,-4,-14,27]
**Output:** [[-14,-10],[19,23],[23,27]]
Constraints:
1
2
2 <= arr.length <= 105
-106 <= arr[i] <= 106
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use std::collections::HashMap;
use itertools::enumerate;
impl Solution {
pub fn minimum_abs_difference(arr: Vec<i32>) -> Vec<Vec<i32>> {
let mut hs: HashMap<i32, Vec<Vec<i32>>> = HashMap::new();
let mut s = arr.clone();
s.sort();
for i in 1..s.len() {
let diff = s[i] - s[i - 1];
if !hs.contains_key(&diff) {
hs.insert(diff, Vec::new());
}
let z = vec![s[i - 1], s[i]];
hs.get_mut(&diff).unwrap().push(z);
}
let mut g = i32::MAX;
let mut res = Vec::new();
for (a, b) in hs {
if a < g {
g = a;
res = b;
}
}
res
}
}
This post is licensed under CC BY 4.0 by the author.