Skip to content

Commit 792b5bc

Browse files
committed
Solved problem 57 : Insert Interval
1 parent f399115 commit 792b5bc

File tree

2 files changed

+84
-3
lines changed

2 files changed

+84
-3
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/*
2+
* Problem: 57
3+
* Name: Insert Interval
4+
* Difficulty: Medium
5+
* Topic: Intervals
6+
* Link: https://leetcode.com/problems/insert-interval/
7+
*/
8+
9+
#include <algorithm>
10+
#include <bits/stdc++.h>
11+
using namespace std;
12+
13+
// Initial Solution (not focused on the global cases)
14+
// Time Complexity: O(n)
15+
// Space Complexity: O(n)
16+
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
17+
vector<vector<int>> result;
18+
bool hasInserted = false;
19+
for (const vector<int>& interval : intervals){
20+
if (!hasInserted){
21+
if (interval[1] < newInterval[0]) {
22+
result.push_back(interval);
23+
}
24+
else if (interval[0] < newInterval[0]) {
25+
result.push_back(interval);
26+
result.back()[1] = max(interval[1], newInterval[1]);
27+
hasInserted = true;
28+
}
29+
else if (interval[0] <= newInterval[1]) {
30+
result.push_back(newInterval);
31+
result.back()[1] = max(interval[1], newInterval[1]);
32+
hasInserted = true;
33+
}
34+
else {
35+
result.push_back(newInterval);
36+
result.push_back(interval);
37+
hasInserted = true;
38+
}
39+
}
40+
else {
41+
if (result.back()[1] < interval[0]){
42+
result.push_back(interval);
43+
}
44+
else {
45+
result.back()[1] = max(interval[1], result.back()[1]);
46+
}
47+
}
48+
}
49+
if (!hasInserted){
50+
result.push_back(newInterval);
51+
hasInserted = true;
52+
}
53+
return result;
54+
}
55+
56+
// Optimized Solution (3 main cases)
57+
// Time Complexity: O(n)
58+
// Space Complexity: O(n)
59+
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
60+
vector<vector<int>> result;
61+
int i = 0;
62+
63+
while (i < intervals.size() && intervals[i][1] < newInterval[0]){
64+
result.push_back(intervals[i]);
65+
i++;
66+
}
67+
68+
while (i < intervals.size() && intervals[i][0] <= newInterval[1]){
69+
newInterval[0] = min(intervals[i][0], newInterval[0]);
70+
newInterval[1] = max(intervals[i][1], newInterval[1]);
71+
i++;
72+
}
73+
result.push_back(newInterval);
74+
75+
while (i < intervals.size()){
76+
result.push_back(intervals[i]);
77+
i++;
78+
}
79+
80+
return result;
81+
}

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
### Problems Solved
1818

19-
| Total | 47 |
19+
| Total | 48 |
2020
|:---:|:---:|
2121

2222
#### Search By Topic
@@ -33,7 +33,7 @@
3333
| Graphs | 1 |
3434
| Graphs Advanced | 0 |
3535
| Greedy | 1 |
36-
| Intervals | 1 |
36+
| Intervals | 2 |
3737
| Linked Lists | 5 |
3838
| Math & Geometry | 4 |
3939
| Priority Queue | 2 |
@@ -47,7 +47,7 @@
4747
| Difficulty | Number |
4848
|:---|---:|
4949
| Easy | 45 |
50-
| Medium | 2 |
50+
| Medium | 3 |
5151
| Hard | 0 |
5252

5353
## Milestones

0 commit comments

Comments
 (0)