最大线段重合问题(用堆实现)

简介: 最大线段重合问题(用堆实现)

题目

给定很多线段,每个线段都有两个数[start, end],表示线段开始位置和结束位置,左右都是闭区间。
规定:
1)线段的开始和结束位置一定都是整数值
2)线段重合区域的长度必须>=1
返回线段最多重合区域中,包含了几条线段

认真分析题目,可以发现任何一个重合区域的左边界 必定是某个线段的左边界

题解步骤:
1.把所有线段根据开始位置从小到大排好序
2.遍历所有线段,在小根堆中弹出所有<=开始位置的值
3.把线段的结束位置加入到小根堆中
4.小根堆中有几个数,就是这个线段的答案
5.返回所有线段中答案的最大值

所有线段根据开始位置从小大到大排好序这一步,我们不必自己写排序,可以用比较器,,

代码:

package com.harrison.class04;

import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.PriorityQueue;

/**
 * @author Harrison
 * @create 2022-03-02-21:17
 * @motto 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。
 */
public class Code06_MaxCover {
    // 1.把所有线段根据开始位置从小到大排好序
    // 2.遍历所有线段,在小根堆中弹出所有<=开始位置的值
    // 3.把线段的结束位置加入到小根堆中
    // 4.小根堆中有几个数,就是这个线段的答案

    //

    public static int maxCover1(int[][] lines){
        int min=Integer.MAX_VALUE;
        int max=Integer.MIN_VALUE;
        for(int i=0; i<lines.length; i++){
            min=Math.min(min,lines[i][0]);
            max=Math.max(max,lines[i][1]);
        }
        int cover=0;
        for(double p=min+0.5; p<max; p+=1){
            int cur=0;
            for(int i=0; i<lines.length; i++){
                if(p>lines[i][0] && p<lines[i][1]){
                    cur++;
                }
            }
            cover=Math.max(cover,cur);
        }
        return cover;
    }

    public static int maxCover2(int[][] m){
        Line[] lines=new Line[m.length];
        for(int i=0; i<lines.length; i++){
            lines[i]=new Line(m[i][0],m[i][1]);
        }
        Arrays.sort(lines,new StartComparator());
        PriorityQueue<Integer> heap=new PriorityQueue<>();
        int max=0;
        for(int i=0; i<lines.length; i++){
            while(!heap.isEmpty() && heap.peek()<=lines[i].start){
                heap.poll();
            }
            heap.add(lines[i].end);
            max=Math.max(max,heap.size());
        }
        return max;
    }

    public static class Line{
        public int start;
        public int end;

        public Line(int s,int e){
            start=s;
            end=e;
        }
    }

    public static class StartComparator implements Comparator<Line>{
        public int compare(Line l1,Line l2){
            return l1.start-l2.start;
        }
    }

    public static int[][] generateLines(int N,int L,int R){
        int size=(int)(Math.random()*N)+1;
        int[][] ans=new int[size][2];
        for(int i=0; i<ans.length; i++){
            int a=L+(int)(Math.random()*(R-L+1));
            int b=L+(int)(Math.random()*(R-L+1));
            if(a==b){
                b=a+1;
            }
            ans[i][0]= Math.min(a,b);
            ans[i][1]=Math.max(a,b);
        }
        return ans;
    }

    public static void main(String[] args) {
        int N=100;
        int L=0;
        int R=200;
        int testTimes=100000;
        System.out.println("test begin");
        for(int i=0; i<testTimes; i++){
            int[][] lines=generateLines(N,L,R);
            int ans1=maxCover1(lines);
            int ans2=maxCover2(lines);
            if(ans1!=ans2){
                System.out.println("oops");
            }
        }
        System.out.println("test finish");
    }
}
相关文章
|
3天前
|
云安全 人工智能 运维
阿里云SecOps Agent,全新安全跨产品执行体验
自然语言驱动 云安全中心/WAF/CFW/ 等多款安全产品联动
1592 2
|
3天前
|
机器学习/深度学习 人工智能 调度
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
HappyHorse 1.1 是新一代视频生成大模型,全面升级动态表现力、角色一致性、指令遵循、视觉质感与音画协同能力。支持I2V/T2V/R2V三类生成,适配短剧、电商广告、品牌营销等场景,提供高质、流畅、可控的AI视频生产力。
557 3
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
|
14天前
|
缓存 测试技术 API
Qwen 3.7 Plus 与 Max 实测:性价比与多模态能力差异解析(2026)
2026 年 6 月 1 日,阿里悄无声息地发布了 Qwen 3.7 Plus,距 Qwen 3.7 Max 上线刚好 11 天。同样的 1M 上下文,同样的 35 小时自治上限。但价格才是头条:Plus 是 0.40/M输入,Max是 2.50/M——便宜约 6 倍——并且还能看图、看视频。Vision Arena 上 Plus 已经排到 #16。所以这周真正值得讨论的问题不是”要不要为视觉能力买单”,而是”Max 凭什么用 6 倍价格换来 2 个百分点的 benchmark 领先”。
|
14天前
|
JavaScript 定位技术 API
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
CodeGraph 是一款爆火的本地代码智能工具,通过 tree-sitter 解析 AST 构建结构化知识图谱(存于 SQLite),为编程 Agent 提前生成“代码地图”。它显著降低 Agent 在中大型项目中的探索成本——实测工具调用减少71%、Token 降57%、速度提升46%,支持19+语言及主流框架路由识别,完全离线、无需 API Key。
897 11
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
|
2天前
|
人工智能 监控 前端开发
Electron 监控:让桌面 Agent 监控触手可及
一行代码实现Electron桌面端全景监控,自动还原崩溃现场、预警内存泄漏、全链路追踪、 SSE流式响应与交互埋点,让 AI 助手运行状态清晰可见,助力快速恢复稳定与流畅。
177 126
|
2天前
|
消息中间件 人工智能 Kafka
AI 时代,实时入湖正在告别 ETL:从 Kafka 到 Iceberg 的架构减法
本文围绕“零 ETL”这一趋势,讨论流数据入湖为什么需要做架构减法,并结合 Kafka × Table Bucket 的实践,分析一种将通用入湖能力前移到消息与表存储链路中的方案,如何在降低复杂度的同时,兼顾实时性、一致性、Schema 演进、CDC 语义与开放生态兼容。
179 121
|
7天前
|
缓存 人工智能 运维
GLM 5.2自托管全流程实战:硬件选型、vLLM/SGLang部署与成本盈亏测算
2026年智谱发布GLM 5.2超大混合专家模型,区别于以往仅开放API的闭源大模型,该模型权重以MIT开源协议对外发布,企业与开发者可完整下载、本地审计、私有化部署,实现数据不出环境、自定义微调、自主调度推理资源。GLM 5.2拥有753B总参数,原生支持百万级上下文窗口,在代码生成、长文档推理、数学逻辑等多项基准测试中对标国际顶尖商用模型,是首款可完整自托管的前沿代码向大模型。
603 0
|
14天前
|
人工智能 运维 JavaScript
阿里云Qoder CN(原通义灵码)全解析 产品形态、版本划分与技术适配说明
在AI辅助开发与智能办公工具持续普及的当下,阿里云旗下原通义灵码正式更名为Qoder CN,同时延伸出QoderWork CN、Qoder CN CLI、Qoder CN Mobile等多款配套产品,形成覆盖代码开发、日常办公、终端交互、移动端使用的完整工具矩阵。Qoder CN核心定位为AI智能编码助手,深度适配主流代码编辑器、集成开发环境以及终端场景;QoderWork CN则偏向桌面端综合办公辅助,二者面向不同使用场景,划分了多个版本档位,搭配差异化资源配额、功能权限与计费规则,同时兼容多款主流大模型。
969 8