当前位置: 首页 > news >正文

堆相关例子-最大线段重合问题

问题描述

 给定很多线段,每个线段都有两个数[start, end],

表示线段开始位置和结束位置,左右都是闭区间

规定:

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

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

返回线段最多重合区域中,包含了几条线段

例如:[3,10],[3,4],[5,9],[7,13],[9,10]返回3 

暴力方式解题

思路

先得到线段最小点和最大点,这是所有线段在x轴上的范围 在该范围上,取小数点如0.5进行查看,即查看每个0.5位置,有没有线段包含该点,记录多少条线段 max 用一个变量cover保存所有点中最多覆盖的线段条数 最后得到的cover就是重合区域最多的线段数目

图例

利用小根堆解题

思路

1.将开始点排序后,遍历该数组

2.将堆中所有 <= 当前线段的开始点的数弹出

3.将该点的结束点加入到堆中

4.记录过程中堆的历史最大长度

5.遍历结束后该长度就是其重合最多线段的个数

图例

待排序数组,且以按开始点排序

[3,10],[3,4],[5,9],[7,13],[9,10]

1. 遍历到[3,10]时

2. 遍历到[3,4]时

3. 遍历到[5,9]时

4.遍历到[7,13]时

5.遍历到[9,10]时

code
public static int coverMax(int [][] lines){if(lines.length < 2)return 0;Arrays.sort(lines, (a, b) -> (a[0] - b[0]));PriorityQueue<Integer> minHeap = new PriorityQueue<>();int max = 0;for (int [] line : lines){while (!minHeap.isEmpty() && minHeap.peek() <= line[0]){minHeap.poll();}minHeap.add(line[1]);max = Math.max(max,minHeap.size());}return max;
}
http://www.lryc.cn/news/163396.html

相关文章:

  • Ztree的日常使用记录
  • PYTHON 3.10中文版官方文档
  • TLS协议深度解析:挖掘现代网络安全防御的底层技术
  • python的time各种用法
  • Vue中使用vue-router
  • uni-app之android原生插件开发
  • javaee spring aop实现事务 项目结构
  • 9.9校招 实习 内推 面经
  • 互联网医院App开发:构建医疗服务的技术指南
  • 阅读分享--重读Youtube深度学习推荐系统论文,字字珠玑,惊为神文
  • 使用Python操作CSV文件,方便又快捷
  • 深入探索KVM虚拟化技术:全面掌握虚拟机的创建与管理
  • javaee springMVC model的使用
  • Spring与Docker:如何容器化你的Spring应用
  • 试图替代 Python 的下一代AI编程语言:Mojo
  • 【数据结构】栈、队列和数组
  • python算法调用方案
  • 《微服务架构设计模式》第二章
  • taro vue3 ts nut-ui 项目
  • 【群答疑】jmeter关联获取上一个请求返回的字符串,分割后保存到数组,把数组元素依次作为下一个请求的入参...
  • Shell 函数详解(函数定义、函数调用)
  • git-命令行显示当前目录分支
  • pgsql 报错 later table “drop column” is not supported now
  • 如何制定私域流量布局计划?
  • yolov8 模型部署--TensorRT部署-c++服务化部署
  • 自适应迭代扩展卡尔曼滤波算法AIEKF估计SOC VS 扩展卡尔曼估计SOC
  • 2023-亲测有效-git clone失败怎么办?用代理?加git?
  • An Empirical Study of GPT-3 for Few-Shot Knowledge-Based VQA
  • 2023高教社杯数学建模B题思路分析 - 多波束测线问题
  • 02-docker network