Skip to content

Commit 67b1526

Browse files
authored
feat: add solutions to lc problems: No.0056,0057 (doocs#1530)
* No.0056.Merge Intervals * No.0057.Insert Interval
1 parent df7cd60 commit 67b1526

File tree

15 files changed

+442
-225
lines changed

15 files changed

+442
-225
lines changed

solution/0000-0099/0056.Merge Intervals/README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,24 @@ public class Solution {
243243
}
244244
```
245245

246+
```cs
247+
public class Solution {
248+
public int[][] Merge(int[][] intervals) {
249+
intervals = intervals.OrderBy(a => a[0]).ToArray();
250+
var ans = new List<int[]>();
251+
ans.Add(intervals[0]);
252+
for (int i = 1; i < intervals.Length; ++i) {
253+
if (ans[ans.Count - 1][1] < intervals[i][0]) {
254+
ans.Add(intervals[i]);
255+
} else {
256+
ans[ans.Count - 1][1] = Math.Max(ans[ans.Count - 1][1], intervals[i][1]);
257+
}
258+
}
259+
return ans.ToArray();
260+
}
261+
}
262+
```
263+
246264
### **TypeScript**
247265

248266
```ts

solution/0000-0099/0056.Merge Intervals/README_EN.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,24 @@ public class Solution {
219219
}
220220
```
221221

222+
```cs
223+
public class Solution {
224+
public int[][] Merge(int[][] intervals) {
225+
intervals = intervals.OrderBy(a => a[0]).ToArray();
226+
var ans = new List<int[]>();
227+
ans.Add(intervals[0]);
228+
for (int i = 1; i < intervals.Length; ++i) {
229+
if (ans[ans.Count - 1][1] < intervals[i][0]) {
230+
ans.Add(intervals[i]);
231+
} else {
232+
ans[ans.Count - 1][1] = Math.Max(ans[ans.Count - 1][1], intervals[i][1]);
233+
}
234+
}
235+
return ans.ToArray();
236+
}
237+
}
238+
```
239+
222240
### **TypeScript**
223241

224242
```ts

solution/0000-0099/0056.Merge Intervals/Solution.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,15 @@ class Solution {
22
public:
33
vector<vector<int>> merge(vector<vector<int>>& intervals) {
44
sort(intervals.begin(), intervals.end());
5-
int st = intervals[0][0], ed = intervals[0][1];
65
vector<vector<int>> ans;
6+
ans.emplace_back(intervals[0]);
77
for (int i = 1; i < intervals.size(); ++i) {
8-
if (ed < intervals[i][0]) {
9-
ans.push_back({st, ed});
10-
st = intervals[i][0];
11-
ed = intervals[i][1];
8+
if (ans.back()[1] < intervals[i][0]) {
9+
ans.emplace_back(intervals[i]);
1210
} else {
13-
ed = max(ed, intervals[i][1]);
11+
ans.back()[1] = max(ans.back()[1], intervals[i][1]);
1412
}
1513
}
16-
ans.push_back({st, ed});
1714
return ans;
1815
}
1916
};
Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
1-
public class Solution {
2-
public int[][] Merge(int[][] intervals) {
3-
intervals = intervals.OrderBy(a => a[0]).ToArray();
4-
int st = intervals[0][0], ed = intervals[0][1];
5-
var ans = new List<int[]>();
6-
for (int i = 1; i < intervals.Length; ++i) {
7-
if (ed < intervals[i][0]) {
8-
ans.Add(new int[] { st, ed });
9-
st = intervals[i][0];
10-
ed = intervals[i][1];
11-
} else {
12-
ed = Math.Max(ed, intervals[i][1]);
13-
}
14-
}
15-
ans.Add(new int[] { st, ed });
16-
return ans.ToArray();
17-
}
1+
public class Solution {
2+
public int[][] Merge(int[][] intervals) {
3+
intervals = intervals.OrderBy(a => a[0]).ToArray();
4+
var ans = new List<int[]>();
5+
ans.Add(intervals[0]);
6+
for (int i = 1; i < intervals.Length; ++i) {
7+
if (ans[ans.Count - 1][1] < intervals[i][0]) {
8+
ans.Add(intervals[i]);
9+
} else {
10+
ans[ans.Count - 1][1] = Math.Max(ans[ans.Count - 1][1], intervals[i][1]);
11+
}
12+
}
13+
return ans.ToArray();
14+
}
1815
}
Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
func merge(intervals [][]int) (ans [][]int) {
2-
sort.Slice(intervals, func(i, j int) bool {
3-
return intervals[i][0] < intervals[j][0]
4-
})
5-
st, ed := intervals[0][0], intervals[0][1]
2+
sort.Slice(intervals, func(i, j int) bool { return intervals[i][0] < intervals[j][0] })
3+
ans = append(ans, intervals[0])
64
for _, e := range intervals[1:] {
7-
if ed < e[0] {
8-
ans = append(ans, []int{st, ed})
9-
st, ed = e[0], e[1]
10-
} else if ed < e[1] {
11-
ed = e[1]
5+
if ans[len(ans)-1][1] < e[0] {
6+
ans = append(ans, e)
7+
} else {
8+
ans[len(ans)-1][1] = max(ans[len(ans)-1][1], e[1])
129
}
1310
}
14-
ans = append(ans, []int{st, ed})
15-
return ans
11+
return
12+
}
13+
14+
func max(a, b int) int {
15+
if a > b {
16+
return a
17+
}
18+
return b
1619
}
Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,16 @@
1-
class Solution {
2-
public int[][] merge(int[][] intervals) {
3-
Arrays.sort(intervals, Comparator.comparingInt(a -> a[0]));
4-
int st = intervals[0][0], ed = intervals[0][1];
5-
List<int[]> ans = new ArrayList<>();
6-
for (int i = 1; i < intervals.length; ++i) {
7-
int s = intervals[i][0], e = intervals[i][1];
8-
if (ed < s) {
9-
ans.add(new int[] {st, ed});
10-
st = s;
11-
ed = e;
12-
} else {
13-
ed = Math.max(ed, e);
14-
}
15-
}
16-
ans.add(new int[] {st, ed});
17-
return ans.toArray(new int[ans.size()][]);
18-
}
1+
class Solution {
2+
public int[][] merge(int[][] intervals) {
3+
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
4+
List<int[]> ans = new ArrayList<>();
5+
ans.add(intervals[0]);
6+
for (int i = 1; i < intervals.length; ++i) {
7+
int s = intervals[i][0], e = intervals[i][1];
8+
if (ans.get(ans.size() - 1)[1] < s) {
9+
ans.add(intervals[i]);
10+
} else {
11+
ans.get(ans.size() - 1)[1] = Math.max(ans.get(ans.size() - 1)[1], e);
12+
}
13+
}
14+
return ans.toArray(new int[ans.size()][]);
15+
}
1916
}
Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
class Solution:
22
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
33
intervals.sort()
4-
ans = []
5-
st, ed = intervals[0]
4+
ans = [intervals[0]]
65
for s, e in intervals[1:]:
7-
if ed < s:
8-
ans.append([st, ed])
9-
st, ed = s, e
6+
if ans[-1][1] < s:
7+
ans.append([s, e])
108
else:
11-
ed = max(ed, e)
12-
ans.append([st, ed])
9+
ans[-1][1] = max(ans[-1][1], e)
1310
return ans
Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
function merge(intervals: number[][]): number[][] {
22
intervals.sort((a, b) => a[0] - b[0]);
3-
const ans: number[][] = [];
4-
let [st, ed] = intervals[0];
5-
for (const [s, e] of intervals.slice(1)) {
6-
if (ed < s) {
7-
ans.push([st, ed]);
8-
[st, ed] = [s, e];
3+
const ans: number[][] = [intervals[0]];
4+
for (let i = 1; i < intervals.length; ++i) {
5+
if (ans.at(-1)[1] < intervals[i][0]) {
6+
ans.push(intervals[i]);
97
} else {
10-
ed = Math.max(ed, e);
8+
ans.at(-1)[1] = Math.max(ans.at(-1)[1], intervals[i][1]);
119
}
1210
}
13-
ans.push([st, ed]);
1411
return ans;
1512
}

0 commit comments

Comments
 (0)