/**
* 一个区间 0,3 1,4 1.5,5,5 2.5,4.5 3,7
* 最大的重叠部分
* @author ly
*
*/
public class MaxOverLapDis {
public static void main(String[] args) {
int[][] a = new int[][]{
new int[]{0,30},
new int[]{10,40},
new int[]{15,60},
new int[]{25,45},
new int[]{30,75},
};
System.out.println(findMaxOverlap(a));
}
public static int findMaxOverlap(int[][] a){
sortArray(a);//可以到nlgn排序 甚至如果都在某一范围内的区间起点,可以到o(n)
int max=0;
int x= a[0][0];
int y= a[0][1];
//o(n)
for(int i =1;i<a.length;i++){
int miny = y<a[i][1]?y:a[i][1];
if(a[i][0]<miny)
max = miny -a[i][0];
if(a[i][1]>=y){
x=a[i][0];
y=a[i][1];
}
}
return max;
}
/**
* 姑且采用插入,可以采用其他的nlgn的方法
* 插入排序
* @param a
*/
public static void sortArray(int[][] a){
for(int i=1 ; i<a.length;i++){
int[] key = a[i];
int j;
for(j=i-1;j>=0;j--){
if(a[j][0]>key[0]){
a[j+1]= a[j];
}
else
break;
}
a[j+1]= key;
}
}
}