你有 k 个升序排列的整数数组。找到一个最小区间,使得 k 个列表中的每个列表至少有一个数包含在其中。

我们定义如果 b-a < d-c 或者在 b-a == d-c 时 a < c,则区间 [a,b] 比 [c,d] 小。

示例 1:

输入:[[4,10,15,24,26], [0,9,12,20], [5,18,22,30]]
输出: [20,24]
解释:
列表 1:[4, 10, 15, 24, 26],24 在区间 [20,24] 中。
列表 2:[0, 9, 12, 20],20 在区间 [20,24] 中。
列表 3:[5, 18, 22, 30],22 在区间 [20,24] 中。

代码

class Solution {class numG{int g,num;public  numG(int g,int num){this.g=g;this.num=num;}}public int[] smallestRange(List<List<Integer>> nums) {PriorityQueue<numG> priorityQueue=new PriorityQueue<>(((o1, o2) -> o1.num-o2.num));
//维护最小堆int end=Integer.MIN_VALUE;int[] index=new int[nums.size()];//记录每个序列的指针for(int i=0;i<nums.size();i++){if(nums.get(i).get(0)>end) end=nums.get(i).get(0);//找出起始区间numG temp=new numG(i,nums.get(i).get(0));priorityQueue.offer(temp);//将每个序列首元素入队}int max=end;int start=priorityQueue.peek().num;int min=start;//初始区间int len=end-start+1;//区间长度while (true){int gr=priorityQueue.poll().g;//将最小的数值出队if (index[gr]+1==nums.get(gr).size()) break;//已经到了该序列的末尾了index[gr]++;//指向该序列的下一个numG n=new numG(gr,nums.get(gr).get(index[gr]));//将下一个入队priorityQueue.offer(n);max= Math.max(max,n.num);//区间扩大min=priorityQueue.peek().num;if(max-min+1<len)//如果是更短的区间,则替换掉原来的区间{start=max;end=min;len=max-min+1;}}return new int[]{end,start};}
}

leetcode632. 最小区间(堆+多指针)相关推荐

  1. [Leetcode][第632题][JAVA][最小区间][堆][滑动窗口]

    [问题描述][困难] [解答思路] 1. 堆 复杂度 class Solution {public int[] smallestRange(List<List<Integer>> ...

  2. LeetCode632 最小区间

    632. 最小区间 难度困难235收藏分享切换为英文关注反馈 你有 k 个升序排列的整数列表.找到一个最小区间,使得 k 个列表中的每个列表至少有一个数包含在其中. 我们定义如果 b-a < d ...

  3. 632. Smallest Range Covering Elements from K Lists 最小区间

    你有 k 个升序排列的整数数组.找到一个最小区间,使得 k 个列表中的每个列表至少有一个数包含在其中. 我们定义如果 b-a < d-c 或者在 b-a == d-c 时 a < c,则区 ...

  4. LeetCode 1851. 包含每个查询的最小区间(排序 + 离线查询 + 优先队列)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个二维整数数组 intervals ,其中 intervals[i] = [lefti, righti] 表示第 i 个区间开始于 lefti .结 ...

  5. 【C 语言】内存四区原理 ( 栈内存与堆内存对比示例 | 函数返回的堆内存指针 | 函数返回的栈内存指针 )

    文章目录 一.函数返回的堆内存指针 二.函数返回的栈内存指针 一.函数返回的堆内存指针 在 main 主函数中 , 调用 get_memory 子函数 , 返回 malloc 初始化的堆内存 , 可以 ...

  6. LeetCode 632. 最小区间(排序+滑动窗口)

    文章目录 1. 题目 2. 解题 1. 题目 你有 k 个升序排列的整数数组. 找到一个最小区间,使得 k 个列表中的每个列表至少有一个数包含在其中. 我们定义如果 b-a < d-c 或者在 ...

  7. 关于指向堆的指针内涵

    对于C/C++程序员来说,指针是天堂,同时指针也是地狱.指针有多少好处,又有多少让人头疼的问题我们这里就不多说了.但为了局部解决指针的问题,我们提出了智能指针这个概念. 实际上,我一直不明白,智能指针 ...

  8. 二维海浪波数谱的matlab,一种海杂波图像下基于最小区间思想的海浪主波周期反演方法...

    一种海杂波图像下基于最小区间思想的海浪主波周期反演方法 [专利摘要]本发明属于海杂波图像下海浪参数分析[技术领域],具体涉及一种海杂波图像下基于最小区间思想的海浪主波周期反演方法.本发明包括:基于雷达 ...

  9. 【转】C#的内存管理:堆栈、托管堆与指针

    在32位的Windows操作系统中,每个进程都可以使用4GB的内存,这得益于虚拟寻址技术,在这4GB的内存中存储着可执行代码.代码加载的DLL和程序运行的所有变量,在C#中,虚拟内存中有个两个存储变量 ...

最新文章

  1. 利用 portupgrade快速更新通过ports安装的软件
  2. c++大作业迷宫游戏 规定时间内完成_小学生做作业磨蹭的7个原因及对策!太准了~...
  3. 巧做辅助线计算三角形角的度数
  4. [Java] 蓝桥杯ADV-95 算法提高 字符串比较
  5. python安装教程-Python安装包+安装教程
  6. ios runtime (2)
  7. 通过千千静听歌词服务器下载歌词(Delphi版)
  8. java核心技术卷一,二(经典)
  9. 系统动力学软件vensim学习之一阶负反馈
  10. cudnn下载注意事项
  11. 图片标注工具labeling的安装和使用
  12. suitecrm查询功能去掉统配符%
  13. 【论文学习】《One-shot Voice Conversion by Separating Speaker and Content Representations with IN》
  14. java语言算阴影梯形面积_例1.2 在梯形中阴影部分面积是150平方厘米,求梯形面积。(《信息学奥赛一本通》)...
  15. 大学书信选3(新年心语)
  16. CPU和内存的电路设计01-非门电路
  17. 米签---个人中心页面功能(uniapp)
  18. 美团笔试题_20220409
  19. SSM网约车管理系统毕业设计源码051630
  20. Nginx入门学习笔记

热门文章

  1. 【微机原理与接口技术】多功能可编程芯片 与 多功能电饭煲
  2. 07-图4 哈利·波特的考试 (25 分)
  3. java基础常问面试题,面试必问
  4. 焦虑的移动互联网开发者如何破局?专题解析
  5. jquery checkbox 实现单选
  6. ZOJ-Crashing Balloon
  7. spring boot中 使用http请求
  8. CPP函数调用的方法
  9. How to adjust OOM score for a process?
  10. (二)单元测试利器 JUnit 4