3Sum Closest LeetCode solution in Rust

1
impl Solution {
2
pub fn three_sum_closest(mut nums: Vec<i32>, target: i32) -> i32 {
3
// [1] sorting would allow us to use two pointers
4
nums.sort_unstable();
5
let mut best_diff: i32 = i32::MAX;
6

7
// [2] use two pointers 'l' and 'r' that converge towards
8
// one another for each first element 'i'
9
for i in 0..nums.len() {
10
let mut l = i + 1;
11
let mut r = nums.len() - 1;
12
let pre_diff = nums[i] - target;
13
while l < r {
14
let diff = pre_diff + nums[l] + nums[r];
15
if diff.abs() < best_diff.abs() {
16
best_diff = diff;
17
}
18
match diff.signum() {
19
1 => r -= 1,
20
-1 => l += 1,
21
0 => return target,
22
_ => unreachable!(),
23
}
24
}
25
}
26

27
return target + best_diff;
28
}
29
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0