Skip to content

Commit be64e3c

Browse files
author
Thuy Trinh
committed
Solution for "Merge Intervals"
1 parent 04b777d commit be64e3c

File tree

3 files changed

+77
-1
lines changed

3 files changed

+77
-1
lines changed

src/main/java/leetcode/meetingrooms/Interval.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package leetcode.meetingrooms;
22

33
public class Interval {
4-
public final int start;
4+
public int start;
55
public int end;
66

77
public Interval() {
@@ -13,4 +13,18 @@ public Interval(int s, int e) {
1313
start = s;
1414
end = e;
1515
}
16+
17+
@Override
18+
public String toString() {
19+
return "[" + start + ", " + end + "]";
20+
}
21+
22+
@Override
23+
public boolean equals(Object obj) {
24+
if (!(obj instanceof Interval)) {
25+
return false;
26+
}
27+
Interval o = (Interval) obj;
28+
return start == o.start && end == o.end;
29+
}
1630
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package leetcode.mergeintervals
2+
3+
import leetcode.meetingrooms.Interval
4+
5+
/**
6+
* https://leetcode.com/problems/merge-intervals/description/
7+
*/
8+
class Solution {
9+
fun merge(intervals: List<Interval>): List<Interval> = when {
10+
intervals.isEmpty() -> emptyList()
11+
else -> {
12+
val sortedIntervals = intervals.sortedBy { it.start }
13+
val mergedIntervals = mutableListOf<Interval>()
14+
mergedIntervals += sortedIntervals.first()
15+
16+
(1..sortedIntervals.lastIndex).forEach {
17+
val current = mergedIntervals.last()
18+
val next = sortedIntervals[it]
19+
when {
20+
current.end >= next.start -> {
21+
// e.g. [1,4] and [2,3] -> [1,4]
22+
current.end = maxOf(current.end, next.end)
23+
}
24+
else -> mergedIntervals += next
25+
}
26+
}
27+
mergedIntervals
28+
}
29+
}
30+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package leetcode.mergeintervals
2+
3+
import leetcode.meetingrooms.Interval
4+
import org.amshove.kluent.shouldEqual
5+
import org.junit.Test
6+
7+
class SolutionTest {
8+
@Test
9+
fun test() {
10+
Solution().merge(listOf(
11+
Interval(1, 3),
12+
Interval(2, 6),
13+
Interval(8, 10),
14+
Interval(15, 18)
15+
)).shouldEqual(listOf(
16+
Interval(1, 6),
17+
Interval(8, 10),
18+
Interval(15, 18)
19+
))
20+
Solution().merge(listOf(
21+
Interval(1, 4),
22+
Interval(2, 3)
23+
)).shouldEqual(listOf(
24+
Interval(1, 4)
25+
))
26+
Solution().merge(listOf(
27+
Interval(1, 3)
28+
)).shouldEqual(listOf(
29+
Interval(1, 3)
30+
))
31+
}
32+
}

0 commit comments

Comments
 (0)