淄博seo网站推广,推广平台排名,wordpress清理插件,有FTP免费网站问题#xff1a;
以数组 intervals 表示若干个区间的集合#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间#xff0c;并返回 一个不重叠的区间数组#xff0c;该数组需恰好覆盖输入中的所有区间 。
示例#xff1a;
示例 1#xff…问题
以数组 intervals 表示若干个区间的集合其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间并返回 一个不重叠的区间数组该数组需恰好覆盖输入中的所有区间 。
示例
示例 1
输入intervals [[1,3],[2,6],[8,10],[15,18]]
输出[[1,6],[8,10],[15,18]]
解释区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2
输入intervals [[1,4],[4,5]]
输出[[1,5]]
解释区间 [1,4] 和 [4,5] 可被视为重叠区间。提示
1 intervals.length 104intervals[i].length 20 starti endi 104
思路 首先对所有区间进行排序使其变成有序区间然后分别取每个区间的元素如果当前end值不大于下一个区间的start就将其加入数组中否则就进行比较最大的值作为end值具体步骤如代码所示。
代码
class Solution {public int[][] merge(int[][] intervals) {int n intervals.length;//先对数组进行排序Arrays.sort(intervals,(a,b)-a[0] - b[0]);Listint[] list new ArrayList();int starti -1;int endi -1;for(int[] inertval : intervals){if(endi inertval[0]){if(starti ! -1){list.add(new int[]{starti,endi});}starti inertval[0];endi inertval[1];} else {endi Math.max(endi,inertval[1]);}}list.add(new int[]{starti,endi});int[][] ans new int[list.size()][2];for(int i 0; i ans.length; i){ans[i] list.get(i);}return ans;}
}