企業(yè)網(wǎng)站網(wǎng)址視頻seo優(yōu)化教程
問(wèn)題:
以數(shù)組?intervals
?表示若干個(gè)區(qū)間的集合,其中單個(gè)區(qū)間為?intervals[i] = [starti, endi]
?。請(qǐng)你合并所有重疊的區(qū)間,并返回?一個(gè)不重疊的區(qū)間數(shù)組,該數(shù)組需恰好覆蓋輸入中的所有區(qū)間?。
示例:
示例 1:
輸入:intervals = [[1,3],[2,6],[8,10],[15,18]] 輸出:[[1,6],[8,10],[15,18]] 解釋:區(qū)間 [1,3] 和 [2,6] 重疊, 將它們合并為 [1,6].
示例?2:
輸入:intervals = [[1,4],[4,5]] 輸出:[[1,5]] 解釋:區(qū)間 [1,4] 和 [4,5] 可被視為重疊區(qū)間。
提示:
1 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi <= 104
思路: 首先對(duì)所有區(qū)間進(jìn)行排序,使其變成有序區(qū)間,然后分別取每個(gè)區(qū)間的元素,如果當(dāng)前end值不大于下一個(gè)區(qū)間的start就將其加入數(shù)組中,否則就進(jìn)行比較,最大的值作為end值,具體步驟如代碼所示。
代碼:
class Solution {public int[][] merge(int[][] intervals) {int n = intervals.length;//先對(duì)數(shù)組進(jìn)行排序Arrays.sort(intervals,(a,b)->a[0] - b[0]);List<int[]> 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;}
}