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:
parent
70b56f4501
commit
3d2785b7d3
@ -58,11 +58,8 @@ impl Range {
|
|||||||
fn contains(&self, n: usize) -> bool {
|
fn contains(&self, n: usize) -> bool {
|
||||||
n >= self.lower && n <= self.upper
|
n >= self.lower && n <= self.upper
|
||||||
}
|
}
|
||||||
fn extend(&self, upper: usize) -> Range {
|
fn extend(&mut self, upper: usize) {
|
||||||
Range {
|
self.upper = upper
|
||||||
lower: self.lower,
|
|
||||||
upper: self.upper.max(upper),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,16 +69,13 @@ impl Ranges {
|
|||||||
Ranges(Vec::new())
|
Ranges(Vec::new())
|
||||||
}
|
}
|
||||||
fn add(&mut self, new: Range) {
|
fn add(&mut self, new: Range) {
|
||||||
if self.0.is_empty() {
|
if let Some(last) = self.0.last_mut() {
|
||||||
self.0.push(new);
|
if last.contains(new.lower) {
|
||||||
} else {
|
last.extend(last.upper.max(new.upper));
|
||||||
let first = &self.0[0];
|
return;
|
||||||
if first.contains(new.lower) {
|
|
||||||
self.0[0] = first.extend(new.upper);
|
|
||||||
} else {
|
|
||||||
self.0.insert(0, new);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
self.0.push(new);
|
||||||
}
|
}
|
||||||
fn total_length(&self) -> usize {
|
fn total_length(&self) -> usize {
|
||||||
self.0.iter().map(|r| r.length()).sum()
|
self.0.iter().map(|r| r.length()).sum()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user