Rust Tape Equilibrium
fn tape_equilibrium(a: &[i64]) -> i64 {
let mut first_part = 0i64;
let mut second_part: i64 = a.iter().sum();
let mut min = i64::MAX;
for i in 0..a.len() - 1 {
first_part += i as i64;
second_part -= i as i64;
let difference = (first_part - second_part).abs();
min = min.min(difference);
}
min
}
This keeps left and right running sums and updates the smallest difference at each split point.
Rust Triangle
fn triangle(mut a: Vec<i64>) -> i64 {
a.sort();
let c = a.len();
if c < 3 {
return 0;
}
for i in 0..c - 2 {
if a[i] > 0 && a[i] > a[i + 2] - a[i + 1] {
return 1;
}
}
0
}
This sorts the values and checks nearby triples, because a valid triangle only needs one local match after sorting.