public static void main(String[] args) {
int [][] arr = new int[5][5];
int max = process(arr);
System.out.println(max);
}
private static int process(int[][] arr) {
if (arr==null) {
return 0;
}
//arr开始线段从小到大排序
int max = 0;
//准备一个小根堆 存放线段结束位置
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
for (int i = 0; i < arr.length; i++) {
//当小根堆为空 或者结束线段小于等于开始线段时 结束
while (!priorityQueue.isEmpty() && arr[i][0]<=priorityQueue.peek()){
priorityQueue.poll();
}
//添加结束线段到小根堆
priorityQueue.add(arr[i][0]);
//此时堆里面的size大小就是重合线段数
max = Math.max(max,priorityQueue.size());
//时间复杂度 logN *N
}
return max;
}
最大线段重合问题
最新推荐文章于 2024-08-26 16:40:46 发布