Files
obsidian/АиСД/Задачи/LeetCode/Merge Intervals.md
T
roma-dxunvrs f57762fd3b Init
2026-09-03 21:40:46 +03:00

26 lines
1.4 KiB
Markdown

Leetcode #56 | #Medium | [[Интервалы]]
## Идея
Сортируем по началу отрезка
Заводим массив res, идем с 1 индекса по интервалам, если текущий перекрывает последний из res - обновляем последний res (начало - тоже, конец - максимум из концов), если не перекрывает - просто добавляем в res
Java hint: `int[]`- тоже наследник `Object` и валиден в качестве дженерика `List<int[]> `
Для конвертации `res.toArray(new int[0][0]) `- параметр нужен для указания типа `int[][]`, если не указать вернеться `Object[]`
## [[Big-O]]
- Время ```O(Nlog(N))```
- Память ```O(N)```
## Код
```Java
class Solution {
public int[][] merge(int[][] intervals) {
if (intervals.length <= 1) return intervals;
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
List<int[]> res = new ArrayList<>();
int[] cur = intervals[0];
res.add(cur);
for (int[] interval : intervals) {
if (interval[0] <= cur[1]) cur[1] = Math.max(cur[1], interval[1]);
else { cur = interval; res.add(cur); }
}
return res.toArray(new int[0][0]);
}
}
```