Skip to content

Commit 736db6e

Browse files
committed
feat: add 056
1 parent 2fcfda7 commit 736db6e

File tree

4 files changed

+174
-0
lines changed

4 files changed

+174
-0
lines changed

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
|43|[Multiply Strings][043]|Math, String|
6868
|49|[Group Anagrams][049]|Hash Table, String|
6969
|50|[Pow(x, n)][050]|Math, Binary Search|
70+
|56|[Merge Intervals][056]|Math, Binary Search|
7071
|554|[Brick Wall][554]|Hash Table|
7172

7273

@@ -131,6 +132,7 @@
131132
[043]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/043/README.md
132133
[049]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/049/README.md
133134
[050]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/050/README.md
135+
[056]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/056/README.md
134136
[554]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/554/README.md
135137

136138
[004]: https://github.com/Blankj/awesome-java-leetcode/blob/master/note/004/README.md

note/056/README.md

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# [Merge Intervals][title]
2+
3+
## Description
4+
5+
Given a collection of intervals, merge all overlapping intervals.
6+
7+
For example,
8+
Given `[1,3],[2,6],[8,10],[15,18]`,
9+
return `[1,6],[8,10],[15,18]`.
10+
11+
**Tags:** Array, Sort
12+
13+
14+
## 思路
15+
16+
题意是给你一组区间,让你把区间合并成没有交集的一组区间。我们可以把区间按`start`进行排序,然后遍历排序后的区间,如果当前的`start`小于前者的`end`,那么说明这两个存在交集,我们取两者中较大的`end`即可;否则的话直接插入到结果序列中即可。
17+
18+
```java
19+
/**
20+
* Definition for an interval.
21+
* public class Interval {
22+
* int start;
23+
* int end;
24+
* Interval() { start = 0; end = 0; }
25+
* Interval(int s, int e) { start = s; end = e; }
26+
* }
27+
*/
28+
class Solution {
29+
public List<Interval> merge(List<Interval> intervals) {
30+
if (intervals == null || intervals.size() <= 1) return intervals;
31+
intervals.sort(new Comparator<Interval>() {
32+
@Override
33+
public int compare(Interval o1, Interval o2) {
34+
if (o1.start < o2.start) return -1;
35+
if (o1.start > o2.start) return 1;
36+
return 0;
37+
}
38+
});
39+
List<Interval> ans = new ArrayList<>();
40+
int start = intervals.get(0).start;
41+
int end = intervals.get(0).end;
42+
for (Interval interval : intervals) {
43+
if (interval.start <= end) {
44+
end = Math.max(end, interval.end);
45+
} else {
46+
ans.add(new Interval(start, end));
47+
start = interval.start;
48+
end = interval.end;
49+
}
50+
}
51+
ans.add(new Interval(start, end));
52+
return ans;
53+
}
54+
}
55+
```
56+
57+
58+
## 结语
59+
60+
如果你同我一样热爱数据结构、算法、LeetCode,可以关注我GitHub上的LeetCode题解:[awesome-java-leetcode][ajl]
61+
62+
63+
64+
[title]: https://leetcode.com/problems/merge-intervals
65+
[ajl]: https://github.com/Blankj/awesome-java-leetcode
+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.blankj.medium._056;
2+
3+
import com.blankj.structure.Interval;
4+
5+
import java.util.ArrayList;
6+
import java.util.Comparator;
7+
import java.util.List;
8+
9+
/**
10+
* <pre>
11+
* author: Blankj
12+
* blog : http://blankj.com
13+
* time : 2017/10/19
14+
* desc :
15+
* </pre>
16+
*/
17+
public class Solution {
18+
public List<Interval> merge(List<Interval> intervals) {
19+
if (intervals == null || intervals.size() <= 1) return intervals;
20+
intervals.sort(new Comparator<Interval>() {
21+
@Override
22+
public int compare(Interval o1, Interval o2) {
23+
if (o1.start < o2.start) return -1;
24+
if (o1.start > o2.start) return 1;
25+
return 0;
26+
}
27+
});
28+
List<Interval> ans = new ArrayList<>();
29+
int start = intervals.get(0).start;
30+
int end = intervals.get(0).end;
31+
for (Interval interval : intervals) {
32+
if (interval.start <= end) {
33+
end = Math.max(end, interval.end);
34+
} else {
35+
ans.add(new Interval(start, end));
36+
start = interval.start;
37+
end = interval.end;
38+
}
39+
}
40+
ans.add(new Interval(start, end));
41+
return ans;
42+
}
43+
44+
public static void main(String[] args) {
45+
Solution solution = new Solution();
46+
Interval.print(solution.merge(Interval.createTestData("[1,3],[2,6],[8,10],[15,18]")));
47+
}
48+
}
+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.blankj.structure;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
/**
7+
* <pre>
8+
* author: Blankj
9+
* blog : http://blankj.com
10+
* time : 2017/10/19
11+
* desc :
12+
* </pre>
13+
*/
14+
public class Interval {
15+
public int start;
16+
public int end;
17+
18+
public Interval() {
19+
start = 0;
20+
end = 0;
21+
}
22+
23+
public Interval(int s, int e) {
24+
start = s;
25+
end = e;
26+
}
27+
28+
/**
29+
* 创建测试数据
30+
*
31+
* @param data [[X,X],[X,X],[X,X]]
32+
* @return {@link List<Interval>}
33+
*/
34+
public static List<Interval> createTestData(String data) {
35+
List<Interval> list = new ArrayList<>();
36+
String[] d = data.substring(1, data.length() - 1).split("],\\[");
37+
for (String s : d) {
38+
String[] sub = s.split(",");
39+
list.add(new Interval(Integer.valueOf(sub[0]), Integer.valueOf(sub[1])));
40+
}
41+
return list;
42+
}
43+
44+
public static void print(List<Interval> list) {
45+
if (list == null) {
46+
System.out.println("null");
47+
return;
48+
}
49+
StringBuilder sb = new StringBuilder();
50+
for (Interval interval : list) {
51+
sb.append("[")
52+
.append(interval.start)
53+
.append(",")
54+
.append(interval.end)
55+
.append("],");
56+
}
57+
System.out.println(sb.substring(0, sb.length() - 1));
58+
}
59+
}

0 commit comments

Comments
 (0)