classSolution{publicint[][]merge(int[][] intervals){//先排序!Arrays.sort(intervals,newComparator<int[]>(){//按intervals[i][0]从小到大排!publicintcompare(int[] interval1,int[] interval2){return interval1[0]- interval2[0];}});List<int[]> res =newArrayList<>();for(int i =0;i < intervals.length;i++){intL= intervals[i][0],R= intervals[i][1];if(res.size()==0|| res.get(res.size()-1)[1]<L){//不重叠
res.add(newint[]{L,R});}else{
res.get(res.size()-1)[1]=Math.max(res.get(res.size()-1)[1],R);//重叠,需要合并}}return res.toArray(newint[res.size()][]);}}
57.插入区间
classSolution{publicint[][]insert(int[][] intervals,int[] newInterval){int left = newInterval[0], right = newInterval[1];boolean flag =false;//确保加入ls的顺序是自小到大List<int[]> ls =newArrayList<>();for(int i =0;i < intervals.length;i++){if(intervals[i][1]< left){//没有区间重叠,直接加入列表
ls.add(intervals[i]);}elseif(intervals[i][0]> right){//必然在并集完了之后执行if(!flag){//因此要先将并集加入ls,切此步骤最多执行一次
flag =true;
ls.add(newint[]{left, right});}
ls.add(intervals[i]);}else{//有重叠,计算并集(关键!)
left =Math.min(left, intervals[i][0]);
right =Math.max(right, intervals[i][1]);}}if(!flag) ls.add(newint[]{left, right});//防止{left, right}未被加入int[][] ans =newint[ls.size()][2];for(int i =0;i < ls.size();i++){
ans[i]= ls.get(i);}return ans;}}