diff --git a/insert-interval/DaleSeo.rs b/insert-interval/DaleSeo.rs new file mode 100644 index 0000000000..41c2349579 --- /dev/null +++ b/insert-interval/DaleSeo.rs @@ -0,0 +1,20 @@ +// TC: O(n) +// SC: O(n) +impl Solution { + pub fn insert(intervals: Vec>, mut new_interval: Vec) -> Vec> { + let mut result = Vec::with_capacity(intervals.len() + 1); + let mut iter = intervals.into_iter().peekable(); + + while let Some(interval) = iter.next_if(|i| i[1] < new_interval[0]) { + result.push(interval); + } + while let Some(interval) = iter.next_if(|i| i[0] <= new_interval[1]) { + new_interval[0] = new_interval[0].min(interval[0]); + new_interval[1] = new_interval[1].max(interval[1]); + } + result.push(new_interval); + result.extend(iter); + + result + } +}