一、题目
以数组 intervals表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
点击查看原题
难度级别: 中等
二、思路
1)排序
三、代码
1)排序
class Solution {public int[][] merge(int[][] intervals) {Arrays.sort(intervals, (int[] a, int[] b) -> {return a[0] - b[0];});List<int[]> ans = new ArrayList();int loc = 0;while (loc < intervals.length) {int left = intervals[loc][0];int right = intervals[loc][1];loc++;while (loc < intervals.length) {if (right < intervals[loc][0]) { // 当前区间没有覆盖的区间,就跳过break;}right = Math.max(right, intervals[loc][1]); // 覆盖当前loc所指区间,则找到最大右侧loc++;}ans.add(new int[]{left, right});}return ans.toArray(new int[ans.size()][2]);}}
时间复杂度位O(nlogn),排序需要用栈,空间复杂度位O(logn)
