和重叠区间算法(编辑)

时间:2014-04-30 17:47:08

标签: java algorithm data-structures

我有一个问题,我需要通过O(n * logn)

得到间隔的并集

我有一个模拟带点的直线

的数组

需要总结所有重叠点

例如: (排序后,(我需要按左侧排序,我做了)) 区间[] arr = [1,3],[2,4.5],[3.5,5],[6,9],[7,8]

如果[1,3]与[2,4.5]重叠([1,3]之间的2),则总和将为:

sum = 4.5-1= 3.5

(exp:[1,3] [2,4,5],[3.5,5] =>在某一行(重叠总和= 5-1 = 4)),

如果[6,9],[7,8]重叠([7,9]之间的[7,8])那么"总和"将是9-6 = 3

总和将是4 + 3 = 7(联合)。

enter code here public static double unionLength(Interval [] arr){
    double sum=0;
    int i=0;
    double start,end;
    double max=0 ,maxtemp=0;
    Sort.mergeSort2(arr);
    if(arr.length>1){
        start=arr[0].left;
        while(i<arr.length){
            if(arr[i+1].left<=arr[i].right){
                max=Math.max(arr[i+1].right, arr[i].right);
                i++;
            }
            else{
                sum=sum+(max-start);                    
                i++;
                start=arr[i].left;
            }
            if(i>=arr.length-1){
                max=Math.max(arr[i].right, arr[i-1].right);
                sum=sum+(max-start);
                break;
            }

        }

    }
    else{
        sum=arr[0].right-arr[0].left;
    }
    return sum;
}

我该如何改进它?

0 个答案:

没有答案