opt: findClosestNumber

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2024-12-28 18:52:33 +08:00
parent 8545a3cbe6
commit 0e253ecb83

View File

@@ -750,24 +750,19 @@ class Utils {
}
static int findClosestNumber(int target, List<int> numbers) {
int minDiff = 127;
int? closestNumber;
try {
for (int number in numbers) {
int diff = target - number;
if (diff < 0) {
continue;
}
if (diff < minDiff) {
minDiff = diff;
closestNumber = number;
}
}
} catch (_) {
} finally {
closestNumber ??= numbers.last;
}
return closestNumber;
return switch (numbers.length) {
0 => target,
1 => numbers.first,
_ => numbers.reduce((a, b) {
int diff1 = (a - target).abs();
int diff2 = (b - target).abs();
return diff1 == diff2
? max(a, b)
: diff1 < diff2
? a
: b;
}),
};
}
// 版本对比