632. 最小区间

墨蓝 2023-03-04 05:25 28阅读 0赞

632. 最小区间

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

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

示例 1:

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

注意:

  1. 给定的列表可能包含重复元素,所以在这里升序表示 >= 。
  2. 1 <= k <= 3500
  3. -105 <= 元素的值 <= 105
  4. 对于使用Java的用户,请注意传入类型已修改为List。重置代码模板后可以看到这项改动。

在这里插入图片描述

  1. class Solution {
  2. public int[] smallestRange(List<List<Integer>> nums) {
  3. int rangeLeft = 0, rangeRight = Integer.MAX_VALUE;
  4. int minRange = rangeRight - rangeLeft;
  5. int max = Integer.MIN_VALUE;
  6. int size = nums.size();
  7. int[] next = new int[size];
  8. PriorityQueue<Integer> priorityQueue = new PriorityQueue<Integer>(new Comparator<Integer>() {
  9. public int compare(Integer index1, Integer index2) {
  10. return nums.get(index1).get(next[index1]) - nums.get(index2).get(next[index2]);
  11. }
  12. });
  13. for (int i = 0; i < size; i++) {
  14. priorityQueue.offer(i);
  15. max = Math.max(max, nums.get(i).get(0));
  16. }
  17. while (true) {
  18. int minIndex = priorityQueue.poll();
  19. int curRange = max - nums.get(minIndex).get(next[minIndex]);
  20. if (curRange < minRange) {
  21. minRange = curRange;
  22. rangeLeft = nums.get(minIndex).get(next[minIndex]);
  23. rangeRight = max;
  24. }
  25. next[minIndex]++;
  26. if (next[minIndex] == nums.get(minIndex).size()) {
  27. break;
  28. }
  29. priorityQueue.offer(minIndex);
  30. max = Math.max(max, nums.get(minIndex).get(next[minIndex]));
  31. }
  32. return new int[]{ rangeLeft, rangeRight};
  33. }
  34. }

发表评论

表情:
评论列表 (有 0 条评论,28人围观)

还没有评论,来说两句吧...

相关阅读

    相关 632. 小区

    [632. 最小区间][632.] 你有 `k` 个升序排列的整数数组。找到一个最小区间,使得 `k` 个列表中的每个列表至少有一个数包含在其中。 我们定义如果 `b-

    相关 阿拉伯帝国(632-1258年)

    阿拉伯帝国是中世纪时地处阿拉伯半岛的阿拉伯人所建立的伊斯兰帝国,唐代以来的中国史书均称之为大食,而西欧则习惯将其称作萨拉森帝国。阿拉伯帝国历经626年,主要有四大哈里发时期(6

    相关 LTE小区搜索

    一、开机过程: 1)UE开机,选择PLMN; 2)从所选PLMN中选择信号最好的小区; 3)发起位置登记; 其中,第2)里的小区选择过程分为:1)锁定一个频率;