leetcode(56)合并区间

合并区间

解题思路:快速排序+伴随排序+迭代合并区间

class Solution {
    public int[][] merge(int[][] intervals) {
        int xlen = intervals.length;
        if(xlen==0){
            return new int[0][0];
        }
        int[] x1 = new int[xlen];
        for(int i=0;i<xlen;i++){
            x1[i]=intervals[i][0];
        }
        kuaipai(intervals,x1,0,xlen-1);
        List<int[]> results = new ArrayList<>();
        for(int i=0;i<xlen-1;++i){
            if(intervals[i][1]>=intervals[i+1][0]){
                if(intervals[i][1]>intervals[i+1][1]){
                    intervals[i+1][0] = intervals[i][0];
                    intervals[i+1][1] = intervals[i][1];
                }else{
                    intervals[i+1][0] = intervals[i][0];
                }
            }else{
                results.add(intervals[i]);
            }
        }
        results.add(intervals[xlen-1]);
        int[][] result = new int[results.size()][2];
        return results.toArray(result);
    }
    public void kuaipai(int[][] intervals,int[] x1,int begin,int finnl){
        if(begin>=finnl){
            return;
        }
        int start = begin;
        int end = finnl;
        int temp = x1[start];
        int temp1 = intervals[start][0];
        int temp2 = intervals[start][1];
        while(start<end){
            while(start<end&&x1[end]>=temp) --end;
            x1[start]=x1[end];
            intervals[start][0]=intervals[end][0];
            intervals[start][1]=intervals[end][1];
            while(start<end&&x1[start]<=temp) ++start;
            x1[end] = x1[start];
            intervals[end][0]=intervals[start][0];
            intervals[end][1]=intervals[start][1];
        }
        x1[start] = temp;
        intervals[start][0]=temp1;
        intervals[start][1]=temp2;
        kuaipai(intervals,x1,begin,start-1);
        kuaipai(intervals,x1,start+1,finnl);
    }
}

 

posted @ 2019-07-25 11:09  海平面下的我们  阅读(152)  评论(0编辑  收藏  举报