|
7 | 7 | public class _56 {
|
8 | 8 |
|
9 | 9 | public static class Solution1 {
|
| 10 | + /** |
| 11 | + * My completely original solution on 10/12/2021. |
| 12 | + */ |
10 | 13 | public int[][] merge(int[][] intervals) {
|
11 |
| - if (intervals.length <= 1) { |
12 |
| - return intervals; |
13 |
| - } |
14 |
| - |
15 |
| - Arrays.sort(intervals, (o1, o2) -> o1[0] - o2[0]); |
16 |
| - |
17 |
| - List<int[]> result = new ArrayList(); |
| 14 | + List<int[]> list = new ArrayList<>(); |
| 15 | + Arrays.sort(intervals, (a, b) -> a[0] != b[0] ? a[0] - b[0] : a[1] - b[1]); |
18 | 16 | for (int i = 0; i < intervals.length; i++) {
|
19 | 17 | int start = intervals[i][0];
|
20 | 18 | int end = intervals[i][1];
|
21 |
| - while (i < intervals.length && end >= intervals[i][0]) { |
22 |
| - end = Math.max(end, intervals[i][1]); |
| 19 | + while (i + 1 < intervals.length && intervals[i + 1][0] <= end) { |
| 20 | + end = Math.max(intervals[i + 1][1], end); |
23 | 21 | i++;
|
24 | 22 | }
|
25 |
| - result.add(new int[]{start, end}); |
26 |
| - i--; |
| 23 | + list.add(new int[]{start, end}); |
27 | 24 | }
|
28 |
| - int[][] finalResult = new int[result.size()][2]; |
29 |
| - for (int i = 0; i < result.size(); i++) { |
30 |
| - finalResult[i][0] = result.get(i)[0]; |
31 |
| - finalResult[i][1] = result.get(i)[1]; |
| 25 | + int[][] ans = new int[list.size()][2]; |
| 26 | + for (int i = 0; i < list.size(); i++) { |
| 27 | + ans[i] = list.get(i); |
32 | 28 | }
|
33 |
| - return finalResult; |
| 29 | + return ans; |
34 | 30 | }
|
35 | 31 | }
|
36 | 32 |
|
|
0 commit comments