
usort, compare 入参 元素 a, 元素 bsort.Slice, compare 入参 元素的索引 i,元素的索引 j>= 当前区间的开始
> 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
排序 + 栈
var merge = function(intervals) {
intervals.sort((a, b) => a[0] - b[0])
const n = intervals.length, r = []
for (let i = 0; i < n; i++) {
if (r.length && r[r.length - 1][1] >= intervals[i][0])
r[r.length - 1][1] = Math.max(r[r.length - 1][1], intervals[i][1])
else
r.push(intervals[i])
}
return r
}; func merge(intervals [][]int) [][]int {
sort.Slice(intervals, func(i, j int) bool {
return intervals[i][0] < intervals[j][0]
})
var r [][]int
for _, interval := range intervals {
n := len(r)
if n > 0 && r[n - 1][1] >= interval[0] {
r[n - 1][1] = max(r[n - 1][1], interval[1])
} else {
r = append(r, interval)
}
}
return r
}
func max(a int, b int) int {
if a > b {
return a
}
return b
} class Solution {
function merge($intervals) {
usort($intervals, function($a, $b) {
return $a[0] - $b[0];
});
$r = [];
foreach ($intervals as $interval) {
$n = count($r);
if ($n && end($r)[1] >= $interval[0])
$r[$n - 1][1] = max(end($r)[1], $interval[1]);
else
$r []= $interval;
}
return $r;
}
}