最大线段重合问题

最大线段重合问题

题目描述
给定很多线段,每个线段都有两个数组[start, end],表示线段开始位置和结束位置,左右都是闭区间。规定:

1)线段的开始和结束位置一定都是整数值

2)线段重合区域的长度必须>=1

题目要求:返回线段最多重合区域中,包含了几条线段

思路:

  1. 将数组按线段初始位置递增排序
  2. 弹出小根堆中小于线段初始位置的值,将线段结束位置放入小根堆,更新线段重合线段数
class Line{
    public int start;
    public int end;
    public Line(int s,int e){
        this.start = s;
        this.end = e;
    }
}
public int maxCover(int[][] arr){
    if(arr.length == 0){
        return 0;
    }
    Line[] ls = new Line[arr.length];
    for(int i = 0;i< arr.length; i++){
        ls[i] = new Line(arr[i][0],arr[i][1]);
    }
    
    Arrays.sort(ls,new Comparator(Line l1,Line l2){
        return l1.start-l2.end;
    });
    
    PriorityQueue<Integer> p = new PriorityQueue();
    
    int max = 0;
    
    for(int i = 0;i<ls.size();i++){
        Line line = ls[i];
        
        while(!p.isEmpty() && heap.peek()< line.start){
            Line e = p.poll();
            
        }
        p.add(line.end);
        max = Math.max(max,p.size()
        
    }
    return max;
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值