632. 最小区间

简介: 632. 最小区间

@TOC


前言

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

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/smallest-range-covering-elements-from-k-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

有序表
非常方便的查到所有数字最小值,也可以非常方便的查到所有数字的最大直
每个数组中的第一个数加入有序表, 取出最大值跟最小值,可以找到一个区间
这个区间一定每个数组都有一个数落在这个区间上
然后删除最小值,把这个最小值来自数组的下一个值加入有序表,排序后重新取出最小值跟最大值
构成一个新的区间,跟之前的区间比较是否更优
当你有一个数组耗尽了,不用再继续了,你找到的最窄区间出来了

在这里插入图片描述
每个数组的第一个数进入有序表
在这里插入图片描述
7进入有序表,把1淘汰,最小区间更新
最后把所有数字都遍历一遍,得到最小的区间

代码

class Solution {
    public class Node{
        public int value;
        public int arrid;
        public int index;
        public Node(int v,int ai,int i){
            value=v;
            arrid=ai;
            index=i;
        }
    }
    public class NodeComparator implements Comparator<Node>{
        public int compare(Node o1,Node o2){
            return o1.value!=o2.value?o1.value-o2.value:o1.arrid-o2.arrid;
        }
    }
    public int[] smallestRange(List<List<Integer>> nums) {
        int N=nums.size();
        TreeSet<Node> orderSet=new TreeSet<>(new NodeComparator());
        for(int i=0;i<N;i++){
            orderSet.add(new Node(nums.get(i).get(0),i,0));
        }
        boolean set=false;
        int a=0;
        int b=0;
        while(orderSet.size()==N){
            Node min=orderSet.first();
            Node max=orderSet.last();
            if(!set||(max.value-min.value<b-a)){
                set=true;
                a=min.value;
                b=max.value;
            }
            min=orderSet.pollFirst();
            int arrid=min.arrid;
            int index=min.index+1;
            if(index!=nums.get(arrid).size()){
                orderSet.add(new Node(nums.get(arrid).get(index),arrid,index));
            }
        }
        return new int[]{a,b};
    }
}
相关文章
|
消息中间件 Java Shell
在CentOS7上安装RocketMQ 4.8.0
本文是博主在CentOS7上安装RocketMQ 4.8.0的记录,希望对大家有所帮助。
1007 0
|
监控 测试技术 网络架构
网络优化利器:深入理解生成树Portfast
【4月更文挑战第22天】
463 0
|
8月前
|
算法 Java 调度
算法系列之贪心算法
在算法中,贪心算法(Greedy Algorithm)是一种常见的解决优化问题的算法。贪心算法的核心思想是:在每一步选择中都采取当前状态下最优的选择,即贪心的做出局部最优的决策,从而希望最终能够得到全局最优解。尽管贪心算法并不总是能够得到全局最优解,但在许多实际问题中,它能够提供足够好的解决方案,并且具有较高的计算效率。
238 7
算法系列之贪心算法
|
11月前
|
机器学习/深度学习 传感器 人工智能
数字孪生技术:智能建筑的新纪元
【10月更文挑战第31天】数字孪生技术正重新定义智能建筑的设计、建造和管理。通过在虚拟环境中创建与实际建筑一致的数字模型,实现实时监测、模拟和优化。本文探讨其在设计、施工、运营、应急管理和未来展望中的应用,展示其在建筑智能化管理中的巨大潜力。
|
12月前
|
监控 数据可视化 数据挖掘
一文带你了解如何通过数据可视化与仪表盘提升工作效率?
在数据驱动的时代,快速、准确地从海量信息中提取有用部分成为核心挑战。**数据可视化**和**仪表盘**是解决这一问题的有效工具。它们将复杂数据转化为直观图表,帮助用户快速掌握关键指标、跟踪进展,并做出更好决策。本文将介绍数据可视化的常见方法、仪表盘的作用,并通过经典案例展示这些工具的实际应用。
257 0
|
存储 JavaScript 开发者
Flutter应用开发:掌握StatefulWidget的实用技巧
Flutter应用开发:掌握StatefulWidget的实用技巧
185 0
|
Ubuntu Android开发 数据安全/隐私保护
【Android平板编程】远程Ubuntu服务器Code-Server编程写代码
【Android平板编程】远程Ubuntu服务器Code-Server编程写代码
251 0
|
监控 安全 大数据
Dataphin V3.10升级速览丨集成能力提升、15个应用场景、数据治理能力优化……
Dataphin V3.10升级速览丨集成能力提升、15个应用场景、数据治理能力优化……
336 0
|
安全 网络安全 数据安全/隐私保护
Ubuntu20 安装使用OpenSSL
Ubuntu20 安装使用OpenSSL
291 0
|
弹性计算 固态存储 数据可视化
2023阿里云服务器租用价格表(一年/按月/按小时报价明细)
阿里云服务器分为云服务器ECS和轻量应用服务器,云服务器ECS专业级云服务器常见的ECS实例规格有ECS共享型n4、ECS突发性能型t6、ECS共享型s6、ECS计算型c5、ECS通用型g5、ECS内存型r5、通用型g7、计算型c7、大数据型d1、GPU云服务器、本地SSD型、高主频通用型hfg7、FPGA计算型 f3及弹性裸金属服务器等。阿里云轻量应用服务器优惠活动来了,2核2G3M带宽轻量服务器一年108元,2核4G4M带宽轻量服务器一年297.98元12个月。
2895 0