0056.合并区间

方法一:排序 + 遍历

时间复杂度 $O(n \times \log n)$,空间复杂度 $O(\log n)$。

func merge(intervals [][]int) [][]int {
	sort.Slice(intervals, func(i, j int) bool { return intervals[i][0] < intervals[j][0] })
	ans := [][]int{intervals[0]}
	for i := 1; i < len(intervals); i++ {
		x, y := intervals[i][0], intervals[i][1]
		if x > ans[len(ans)-1][1] {
			ans = append(ans, []int{x, y})
		} else if y > ans[len(ans)-1][1] {
			ans[len(ans)-1][1] = y
		}
	}
	return ans
}
impl Solution {
    pub fn merge(intervals: Vec<Vec<i32>>) -> Vec<Vec<i32>> {
        let mut intervals = intervals;
        intervals.sort_by(|a, b| a[0].cmp(&b[0]));
        let mut ans = Vec::new();

        for v in intervals {
            if ans.is_empty() {
                ans.push(v);
                continue;
            }
            let last = ans.last_mut().unwrap();
            if v[0] > last[1] {
                ans.push(v);
            } else if v[1] > last[1] {
                last[1] = v[1];
            }
        }
        ans
    }
}