56. 合并区间

package leetcode;

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

public class demo_56 {
    public int[][] merge(int[][] intervals) {
        List<int[]> list=new ArrayList<int[]>();
        //数组进行排序
        Arrays.sort(intervals,new Comparator<int[]>() {
            public int compare(int[] s1,int[] s2) {
                if(s1[0]==s2[0]) {return s1[1]-s2[1];}
                return s1[0]-s2[0];
            }
        });
        int left=intervals[0][0];
        int right=intervals[0][1];
        for(int i=1;i<intervals.length;i++) {
            //当前区间能与前一个合并
            if(intervals[i][0]<=right) {
                 right=right>intervals[i][1]?right:intervals[i][1];
             }
            //否则把前一个数组加入List中,再重新新建一个区间
             else {
                list.add(new int[] {left,right});
                left=intervals[i][0];
                right=intervals[i][1];
            }
        }
        //循环中最后一个区间会被丢弃所以加上
        list.add(new int[] {left,right});
        int index=0;
        int[][] array=new int[list.size()][2];
        for(int[] a:list) {
            array[index][0]=a[0];
            array[index][1]=a[1];
            index=index+1;
        }
        for(int i=0;i<array.length;i++) {
            for(int j=0;j<2;j++) {
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }
        return array;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        demo_56 d56=new demo_56();
        int[][] intervals= {{1,3},{2,6},{8,10},{15,18}};
        d56.merge(intervals);
    }

}

 

posted on 2021-05-29 11:28  一仟零一夜丶  阅读(65)  评论(0)    收藏  举报