LeetCode#56-合并区间

package shuzu;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

/*
56. 合并区间
给出一个区间的集合,请合并所有重叠的区间。

示例 1:

输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:

输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
 */
public class p56 {
    public int[][] merge(int[][] intervals) {
        ArrayList<List<Integer>>arrayList=new ArrayList<>();
        Arrays.sort(intervals, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[0]-o2[0];
            }
        });
        int ans[][]=new int[0][0];
        if(intervals==null||intervals.length==0)return ans;
        int i=0;
        while (i<intervals.length-1){
            if(canUnion(intervals[i],intervals[i+1])){//如果能够合并就合并
                intervals[i+1]=Union(intervals[i],intervals[i+1]);
                i++;
            }
            else {//不能合并
                ArrayList<Integer>list=new ArrayList<>();
                list.add(intervals[i][0]);
                list.add(intervals[i][1]);
                arrayList.add(list);
                i++;
            }
        }
        if(!canUnion(intervals[intervals.length-2],intervals[intervals.length-1])){
            ArrayList<Integer>list=new ArrayList<>();
            list.add(intervals[intervals.length-1][0]);
            list.add(intervals[intervals.length-1][1]);
            arrayList.add(list);
        }
        int res[][]=new int[arrayList.size()][2];
        for(int j=0;j<arrayList.size();j++){
            res[j][0]=arrayList.get(j).get(0);
            res[j][1]=arrayList.get(j).get(1);
        }
        return res;

    }
    public boolean canUnion(int []num1,int []num2){//判断两个区间数组能否合并
        if(num1[1]>=num2[0])return true;
        return false;
    }
    public int [] Union(int []num1,int []num2){//合并两个区间
        int res[]=new int[2];
        res[0]=num1[0]<num2[0]?num1[0]:num2[0];
        res[1]=num1[1]>num2[1]?num1[1]:num2[1];
        return res;
    }
}

  运行结果:

posted @ 2020-07-22 15:06  菜鸡要加油  阅读(147)  评论(0编辑  收藏  举报