Skip to content

Commit 97a6863

Browse files
authoredSep 1, 2023
feat: add rust solution to lc problem: No.0057 (#1556)
No.0057 Insert Interval
1 parent 6e79a40 commit 97a6863

File tree

3 files changed

+150
-0
lines changed

3 files changed

+150
-0
lines changed
 

‎solution/0000-0099/0057.Insert Interval/README.md

+61
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,67 @@ public class Solution {
422422
}
423423
```
424424

425+
### **Rust**
426+
427+
```rust
428+
impl Solution {
429+
pub fn insert(intervals: Vec<Vec<i32>>, new_interval: Vec<i32>) -> Vec<Vec<i32>> {
430+
let mut merged_intervals = intervals.clone();
431+
merged_intervals.push(vec![new_interval[0], new_interval[1]]);
432+
// sort by elem[0]
433+
merged_intervals.sort_by_key(|elem| elem[0]);
434+
// merge interval
435+
let mut result = vec![];
436+
437+
for interval in merged_intervals {
438+
if result.is_empty() {
439+
result.push(interval);
440+
continue;
441+
}
442+
443+
let last_elem = result.last_mut().unwrap();
444+
if interval[0] > last_elem[1] {
445+
result.push(interval);
446+
} else {
447+
last_elem[1] = last_elem[1].max(interval[1]);
448+
}
449+
}
450+
result
451+
}
452+
}
453+
```
454+
455+
```rust
456+
impl Solution {
457+
pub fn insert(intervals: Vec<Vec<i32>>, new_interval: Vec<i32>) -> Vec<Vec<i32>> {
458+
let mut inserted = false;
459+
let mut result = vec![];
460+
461+
let (mut start, mut end) = (new_interval[0], new_interval[1]);
462+
for iter in intervals.iter() {
463+
let (cur_st, cur_ed) = (iter[0], iter[1]);
464+
if cur_ed < start {
465+
result.push(vec![cur_st, cur_ed]);
466+
} else if cur_st > end {
467+
if !inserted {
468+
inserted = true;
469+
result.push(vec![start, end]);
470+
}
471+
result.push(vec![cur_st, cur_ed]);
472+
} else {
473+
start = std::cmp::min(start, cur_st);
474+
end = std::cmp::max(end, cur_ed);
475+
}
476+
}
477+
478+
if !inserted {
479+
result.push(vec![start, end]);
480+
}
481+
result
482+
}
483+
}
484+
```
485+
425486
### **...**
426487

427488
```

‎solution/0000-0099/0057.Insert Interval/README_EN.md

+61
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,67 @@ public class Solution {
376376
}
377377
```
378378

379+
### **Rust**
380+
381+
```rust
382+
impl Solution {
383+
pub fn insert(intervals: Vec<Vec<i32>>, new_interval: Vec<i32>) -> Vec<Vec<i32>> {
384+
let mut merged_intervals = intervals.clone();
385+
merged_intervals.push(vec![new_interval[0], new_interval[1]]);
386+
// sort by elem[0]
387+
merged_intervals.sort_by_key(|elem| elem[0]);
388+
// merge interval
389+
let mut result = vec![];
390+
391+
for interval in merged_intervals {
392+
if result.is_empty() {
393+
result.push(interval);
394+
continue;
395+
}
396+
397+
let last_elem = result.last_mut().unwrap();
398+
if interval[0] > last_elem[1] {
399+
result.push(interval);
400+
} else {
401+
last_elem[1] = last_elem[1].max(interval[1]);
402+
}
403+
}
404+
result
405+
}
406+
}
407+
```
408+
409+
```rust
410+
impl Solution {
411+
pub fn insert(intervals: Vec<Vec<i32>>, new_interval: Vec<i32>) -> Vec<Vec<i32>> {
412+
let mut inserted = false;
413+
let mut result = vec![];
414+
415+
let (mut start, mut end) = (new_interval[0], new_interval[1]);
416+
for iter in intervals.iter() {
417+
let (cur_st, cur_ed) = (iter[0], iter[1]);
418+
if cur_ed < start {
419+
result.push(vec![cur_st, cur_ed]);
420+
} else if cur_st > end {
421+
if !inserted {
422+
inserted = true;
423+
result.push(vec![start, end]);
424+
}
425+
result.push(vec![cur_st, cur_ed]);
426+
} else {
427+
start = std::cmp::min(start, cur_st);
428+
end = std::cmp::max(end, cur_ed);
429+
}
430+
}
431+
432+
if !inserted {
433+
result.push(vec![start, end]);
434+
}
435+
result
436+
}
437+
}
438+
```
439+
379440
### **...**
380441

381442
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
impl Solution {
2+
pub fn insert(intervals: Vec<Vec<i32>>, new_interval: Vec<i32>) -> Vec<Vec<i32>> {
3+
let mut inserted = false;
4+
let mut result = vec![];
5+
6+
let (mut start, mut end) = (new_interval[0], new_interval[1]);
7+
for iter in intervals.iter() {
8+
let (cur_st, cur_ed) = (iter[0], iter[1]);
9+
if cur_ed < start {
10+
result.push(vec![cur_st, cur_ed]);
11+
} else if cur_st > end {
12+
if !inserted {
13+
inserted = true;
14+
result.push(vec![start, end]);
15+
}
16+
result.push(vec![cur_st, cur_ed]);
17+
} else {
18+
start = std::cmp::min(start, cur_st);
19+
end = std::cmp::max(end, cur_ed);
20+
}
21+
}
22+
23+
if !inserted {
24+
result.push(vec![start, end]);
25+
}
26+
result
27+
}
28+
}

0 commit comments

Comments
 (0)