我有一个问题,我需要通过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;
}
我该如何改进它?