Make Rust day 5 vector operations more efficient

We do more in-place and operate on the end of the vector to avoid quadratic complexity.
This commit is contained in:
George Thomas 2026-01-07 14:45:55 +00:00
parent 70b56f4501
commit 3d2785b7d3

View File

@ -58,11 +58,8 @@ impl Range {
fn contains(&self, n: usize) -> bool {
n >= self.lower && n <= self.upper
}
fn extend(&self, upper: usize) -> Range {
Range {
lower: self.lower,
upper: self.upper.max(upper),
}
fn extend(&mut self, upper: usize) {
self.upper = upper
}
}
@ -72,16 +69,13 @@ impl Ranges {
Ranges(Vec::new())
}
fn add(&mut self, new: Range) {
if self.0.is_empty() {
if let Some(last) = self.0.last_mut() {
if last.contains(new.lower) {
last.extend(last.upper.max(new.upper));
return;
}
}
self.0.push(new);
} else {
let first = &self.0[0];
if first.contains(new.lower) {
self.0[0] = first.extend(new.upper);
} else {
self.0.insert(0, new);
}
}
}
fn total_length(&self) -> usize {
self.0.iter().map(|r| r.length()).sum()