Skip to content

Commit d436d8e

Browse files
committed
56. Merge Intervals
1 parent 93d7770 commit d436d8e

File tree

4 files changed

+271
-0
lines changed

4 files changed

+271
-0
lines changed

markdown/56. Merge Intervals.md

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
### [56\. Merge Intervals](https://leetcode.com/problems/merge-intervals/)
2+
3+
Difficulty: **Medium**
4+
5+
6+
Given a collection of intervals, merge all overlapping intervals.
7+
8+
**Example 1:**
9+
10+
```
11+
Input: [[1,3],[2,6],[8,10],[15,18]]
12+
Output: [[1,6],[8,10],[15,18]]
13+
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
14+
```
15+
16+
**Example 2:**
17+
18+
```
19+
Input: [[1,4],[4,5]]
20+
Output: [[1,5]]
21+
Explanation: Intervals [1,4] and [4,5] are considered overlapping.
22+
```
23+
24+
**NOTE:** input types have been changed on April 15, 2019\. Please reset to default code definition to get new method signature.
25+
26+
27+
#### Solution B
28+
29+
Language: **Java**
30+
31+
```java
32+
class Solution {
33+
public int[][] merge(int[][] intervals) {
34+
List<int[]> result = new ArrayList<>();
35+
if (intervals == null || intervals.length == 0) {
36+
return result.toArray(new int[result.size()][]);
37+
}
38+
Arrays.sort(intervals, Comparator.comparingInt(i -> i[0]));
39+
// key 是数组的值,value 表示这个是左还是右,左为-1,右为1,如果都有,则求和
40+
Map<Integer, Integer> map = new TreeMap<>();
41+
for (int i = 0; i < intervals.length; i++) {
42+
int left = intervals[i][0];
43+
if (map.containsKey(left)) {
44+
map.put(left, map.get(left) - 1);
45+
} else {
46+
map.put(left, -1);
47+
}
48+
int right = intervals[i][1];
49+
if (map.containsKey(right)) {
50+
map.put(right, map.get(right) + 1);
51+
} else {
52+
map.put(right, 1);
53+
}
54+
}
55+
int[] interval = new int[2];
56+
interval[0] = intervals[0][0];
57+
int i = 0;
58+
for (Integer integer : map.keySet()) {
59+
if (i == 0) {
60+
interval = new int[2];
61+
interval[0] = integer;
62+
}
63+
i += map.get(integer);
64+
if (i == 0) {
65+
interval[1] = integer;
66+
result.add(interval);
67+
}
68+
}
69+
return result.toArray(new int[result.size()][]);
70+
}
71+
}
72+
73+
```
74+
#### Solution B
75+
76+
Language: **Java**
77+
78+
```java
79+
class Solution {
80+
public int[][] merge(int[][] intervals) {
81+
if (intervals.length <= 1)
82+
return intervals;
83+
84+
// Sort by ascending starting point
85+
Arrays.sort(intervals, (i1, i2) -> Integer.compare(i1[0], i2[0]));
86+
87+
List<int[]> result = new ArrayList<>();
88+
int[] newInterval = intervals[0];
89+
result.add(newInterval);
90+
for (int[] interval : intervals) {
91+
if (interval[0] <= newInterval[1]) // Overlapping intervals, move the end if needed
92+
newInterval[1] = Math.max(newInterval[1], interval[1]);
93+
else { // Disjoint intervals, add the new interval to the list
94+
newInterval = interval;
95+
result.add(newInterval);
96+
}
97+
}
98+
return result.toArray(new int[result.size()][]);
99+
}
100+
}
101+
```
102+
103+
![](http://ww2.sinaimg.cn/large/006tNc79ly1g4xeakhdjej31010u07bt.jpg)

src/main/java/leetcode/_56_/Main.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package leetcode._56_;
2+
3+
/**
4+
* Created by zhangbo54 on 2019-03-04.
5+
*/
6+
public class Main {
7+
public static void main(String[] args) {
8+
Solution solution = new Solution();
9+
int[][] intervals = {{1, 3}, {8, 10}, {15, 18}, {2, 6}};
10+
// int[][] merge = solution.merge(intervals);
11+
// System.out.println(merge);
12+
int[][] intervals2 = {{1, 4}, {1, 4}};
13+
solution.merge(intervals2);
14+
}
15+
}
16+
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package leetcode._56_;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.Comparator;
6+
import java.util.List;
7+
import java.util.Map;
8+
import java.util.TreeMap;
9+
10+
class Solution {
11+
public int[][] merge(int[][] intervals) {
12+
List<int[]> result = new ArrayList<>();
13+
if (intervals == null || intervals.length == 0) {
14+
return result.toArray(new int[result.size()][]);
15+
}
16+
Arrays.sort(intervals, Comparator.comparingInt(i -> i[0]));
17+
// key 是数组的值,value 表示这个是左还是右,左为-1,右为1,如果都有,则求和
18+
Map<Integer, Integer> map = new TreeMap<>();
19+
for (int i = 0; i < intervals.length; i++) {
20+
int left = intervals[i][0];
21+
if (map.containsKey(left)) {
22+
map.put(left, map.get(left) - 1);
23+
} else {
24+
map.put(left, -1);
25+
}
26+
int right = intervals[i][1];
27+
if (map.containsKey(right)) {
28+
map.put(right, map.get(right) + 1);
29+
} else {
30+
map.put(right, 1);
31+
}
32+
}
33+
int[] interval = new int[2];
34+
interval[0] = intervals[0][0];
35+
int i = 0;
36+
for (Integer integer : map.keySet()) {
37+
if (i == 0) {
38+
interval = new int[2];
39+
interval[0] = integer;
40+
}
41+
i += map.get(integer);
42+
if (i == 0) {
43+
interval[1] = integer;
44+
result.add(interval);
45+
}
46+
}
47+
return result.toArray(new int[result.size()][]);
48+
}
49+
}
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
### [56\. Merge Intervals](https://leetcode.com/problems/merge-intervals/)
2+
3+
Difficulty: **Medium**
4+
5+
6+
Given a collection of intervals, merge all overlapping intervals.
7+
8+
**Example 1:**
9+
10+
```
11+
Input: [[1,3],[2,6],[8,10],[15,18]]
12+
Output: [[1,6],[8,10],[15,18]]
13+
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
14+
```
15+
16+
**Example 2:**
17+
18+
```
19+
Input: [[1,4],[4,5]]
20+
Output: [[1,5]]
21+
Explanation: Intervals [1,4] and [4,5] are considered overlapping.
22+
```
23+
24+
**NOTE:** input types have been changed on April 15, 2019\. Please reset to default code definition to get new method signature.
25+
26+
27+
#### Solution B
28+
29+
Language: **Java**
30+
31+
```java
32+
class Solution {
33+
public int[][] merge(int[][] intervals) {
34+
List<int[]> result = new ArrayList<>();
35+
if (intervals == null || intervals.length == 0) {
36+
return result.toArray(new int[result.size()][]);
37+
}
38+
Arrays.sort(intervals, Comparator.comparingInt(i -> i[0]));
39+
// key 是数组的值,value 表示这个是左还是右,左为-1,右为1,如果都有,则求和
40+
Map<Integer, Integer> map = new TreeMap<>();
41+
for (int i = 0; i < intervals.length; i++) {
42+
int left = intervals[i][0];
43+
if (map.containsKey(left)) {
44+
map.put(left, map.get(left) - 1);
45+
} else {
46+
map.put(left, -1);
47+
}
48+
int right = intervals[i][1];
49+
if (map.containsKey(right)) {
50+
map.put(right, map.get(right) + 1);
51+
} else {
52+
map.put(right, 1);
53+
}
54+
}
55+
int[] interval = new int[2];
56+
interval[0] = intervals[0][0];
57+
int i = 0;
58+
for (Integer integer : map.keySet()) {
59+
if (i == 0) {
60+
interval = new int[2];
61+
interval[0] = integer;
62+
}
63+
i += map.get(integer);
64+
if (i == 0) {
65+
interval[1] = integer;
66+
result.add(interval);
67+
}
68+
}
69+
return result.toArray(new int[result.size()][]);
70+
}
71+
}
72+
73+
```
74+
#### Solution B
75+
76+
Language: **Java**
77+
78+
```java
79+
class Solution {
80+
public int[][] merge(int[][] intervals) {
81+
if (intervals.length <= 1)
82+
return intervals;
83+
84+
// Sort by ascending starting point
85+
Arrays.sort(intervals, (i1, i2) -> Integer.compare(i1[0], i2[0]));
86+
87+
List<int[]> result = new ArrayList<>();
88+
int[] newInterval = intervals[0];
89+
result.add(newInterval);
90+
for (int[] interval : intervals) {
91+
if (interval[0] <= newInterval[1]) // Overlapping intervals, move the end if needed
92+
newInterval[1] = Math.max(newInterval[1], interval[1]);
93+
else { // Disjoint intervals, add the new interval to the list
94+
newInterval = interval;
95+
result.add(newInterval);
96+
}
97+
}
98+
return result.toArray(new int[result.size()][]);
99+
}
100+
}
101+
```
102+
103+
![](http://ww2.sinaimg.cn/large/006tNc79ly1g4xeakhdjej31010u07bt.jpg)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy