最小区间
[最小区间](https://leetcode-cn.com/problems/smallest-range-covering-elements-from-k-lists/
最小区间,就是每一个有序列表对应的一个元素max-min最小,通过堆维护所有的列表中的最小值,通过maxv变量维护最大值
class Solution {
public int[] smallestRange(List<List<Integer>> nums){
int maxv=Integer.MIN_VALUE;
int leftRange=0;int rightRange=Integer.MAX_VALUE;
int minRange=rightRange-leftRange;
int size=nums.size();
//通过next[]数组维护每一个列表的当前最小元素小标
int[] next=new int[size];
PriorityQueue<Integer> queue=new PriorityQueue<Integer>((a,b)->Integer.compare(nums.get(a).get(next[a]),nums.get(b).get(next[b])));
for(int i=0;i<nums.size();i++){
queue.offer(i);
//维护最大值
maxv=Math.max(maxv,nums.get(i).get(0));
}
//对于所有的元素进行遍历
while(true){
//取出队头元素
Integer node = queue.poll();
int newRange=maxv-nums.get(node).get(next[node]);
if(newRange<minRange){
minRange=newRange;
leftRange=nums.get(node).get(next[node]);
rightRange=maxv;
}
//将当前元素
next[node]++;
//如果对应的某一个列表所有的元素遍历完
if(next[node]==nums.get(node).size()){
break;
}
//将当前列表放入队列
queue.offer(node);
//维护新的最大值
maxv=Math.max(maxv,nums.get(node).get(next[node]));
}
return new int[]{leftRange,rightRange};
}
}