MergeIntervals

来源:互联网 发布:画图软件有哪些 编辑:程序博客网 时间:2024/06/15 10:10

【题目】
Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].

对给定的一些列区间进行合并。
我的思路:
1.对每个区间的开始的数进行比较,并且从小到大排序。
2.排序好之后,对相邻的两个区间:
比如【a,b】,【c,d】,比较b , c , d的关系。

语言学的比较渣,用的Java,但是Java有的类和方法不熟,所以有点C语言风格~

package MergeIntervals;public class SortData {    public static int []sort_data(int dat[])    {        //输入n个数,对第奇数个数从小到大排序        int len=dat.length;        int [] sdat=new int[len];//定义一个数组,保存最后merge的结果        int t1,t2;        for(int j=0;j<len/2-1;j+=1)  //进行len/2-1次循环        {            for(int i=0;i<len-3;i+=2)            {                if(dat[i]>dat[i+2])                {                    t1=dat[i];                    t2=dat[i+1];                    dat[i]=dat[i+2];                    dat[i+2]=t1;                    dat[i+1]=dat[i+3];                    dat[i+3]=t2;                    }            }           }        //冒泡排序后得到新的区间排列        //比两个区间相邻数的大小        //将merge之后的新的区间保存在sdat里面。        int j=0;        sdat[0]=dat[0];        sdat[1]=dat[1];                     for(int i=0;i<len-3;i+=2)         {            //相邻两个区间【a,b】【c,d】 , b>=c并且b<=d            if(sdat[j+1]>=dat[i+2]&&sdat[j+1]<=dat[i+3])            {                sdat[j+1]=dat[i+3];            }            //相邻两个区间【a,b】【c,d】 , b>=c并且b>d            else if(sdat[j+1]>=dat[i+2]&&sdat[j+1]>dat[i+3])            {                sdat[j+1]=sdat[j+1];            }            //相邻两个区间【a,b】【c,d】 , b<c            else            {                sdat[j+2]=dat[i+2];                sdat[j+3]=dat[i+3];                 j+=2;            }        }        return sdat;            }}
package MergeIntervals;public class MergeIntervals {    public static void main(String[] args)     {        //输入的区间如果是【a,b】,要满足:a<=b。        int[] k={1,3,2,6,8,10,15,18};        int len=k.length;        int[] out=SortData.sort_data(k);        for(int i=0;i<len;i+=2)        {            if(i==0||out[i]!=0)//输出overlap后的结果            {            System.out.print("["+out[i]+","+out[i+1]+"]"+" ");            }        }       }}
原创粉丝点击