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); } }