leetcode 56合并区间 java

it2022-05-05  133

//先排序,将左区间小的放在前面,然后如果前一个的右区间大于下一个的左区间,则可以合并,分别用两个下标指向当前的大区间和将要考察的小区间

class Solution {    public int[][] merge(int[][] intervals) {        if(intervals.length<=1)            return intervals;        quickSort(intervals,0,intervals.length-1);        int j=0;        for(int i=0;i<intervals.length;i++)        {            if(intervals[j][1]>=intervals[i][0])            {                intervals[j][1]=Math.max(intervals[j][1],intervals[i][1]);            }            else            {                j++;                intervals[j][0]=intervals[i][0];                intervals[j][1]=intervals[i][1];            }        }        int[][] res = Arrays.copyOfRange(intervals, 0, j+1);        return res;    }    public void quickSort(int[][] arr,int l,int r)    {        if(l>=r)            return ;        int p=partition(arr,l,r);       //执行partition操作将数组分成两份        quickSort(arr,l,p-1);        quickSort(arr,p+1,r);    }    public int partition(int[][] arr,int l,int r)    {        int v=arr[l][0];        int i=l;        //[l-i]为左半部分 初始为0,小于i的部分包括i        for(int k=l+1;k<=r;k++)        {            if(arr[k][0]<v)            {                 swap(arr,k,i+1);                 i++;            }                  }        swap(arr,l,i);        return i;    }    public void swap(int[][] arr,int i,int j)    {        int temp=arr[i][0];        arr[i][0]=arr[j][0];        arr[j][0]=temp;        int y=arr[i][1];        arr[i][1]=arr[j][1];        arr[j][1]=y;    }}

转载于:https://www.cnblogs.com/cold-windy/p/11205287.html

相关资源:日期合并算法

最新回复(0)