TGViewer
Java | LeetCode Java | LeetCode @easy_java_task · 6.44K subscribers
Post #1784 527
Задача: 632. Smallest Range Covering Elements from K Lists
Сложность: hard

У вас есть k списков отсортированных целых чисел в неубывающем порядке. Найдите наименьший диапазон, в который входит хотя бы одно число из каждого из k списков. Мы определяем, что диапазон [a, b] меньше диапазона [c, d], если b - a < d - c или a < c, если b - a == d - c.

Пример:
Input: nums = [[4,10,15,24,26],[0,9,12,20],[5,18,22,30]]
Output: [20,24]


👨‍💻 Алгоритм:

1⃣Инициализация и сбор всех начальных элементов: Создайте массив для хранения текущих индексов каждого списка и используйте минимальную кучу для отслеживания текущих минимальных элементов из каждого списка.

2⃣Нахождение минимального диапазона: Используйте кучу для извлечения минимального элемента и обновления текущего диапазона. Обновляйте максимальный элемент в текущем диапазоне при добавлении новых элементов.

3⃣Проверка и обновление диапазона: Продолжайте обновлять кучу и диапазон, пока возможно. Завершите, когда один из списков исчерпан.

😎 Решение:
import java.util.PriorityQueue;

public class Solution {
public int[] smallestRange(List<List<Integer>> nums) {
PriorityQueue<Element> minHeap = new PriorityQueue<>((a, b) -> a.value - b.value);
int maxValue = Integer.MIN_VALUE;

for (int i = 0; i < nums.size(); i++) {
int value = nums.get(i).get(0);
minHeap.add(new Element(value, i, 0));
maxValue = Math.max(maxValue, value);
}

int rangeStart = 0, rangeEnd = Integer.MAX_VALUE;

while (minHeap.size() == nums.size()) {
Element minElement = minHeap.poll();
if (maxValue - minElement.value < rangeEnd - rangeStart) {
rangeStart = minElement.value;
rangeEnd = maxValue;
}

if (minElement.col + 1 < nums.get(minElement.row).size()) {
int value = nums.get(minElement.row).get(minElement.col + 1);
minHeap.add(new Element(value, minElement.row, minElement.col + 1));
maxValue = Math.max(maxValue, value);
}
}

return new int[]{rangeStart, rangeEnd};
}
}

class Element {
int value, row, col;
Element(int value, int row, int col) {
this.value = value;
this.row = row;
this.col = col;
}
}


Ставь 👍 и забирай 📚 Базу знаний
More from @easy_java_task
  1. Oct 14, 2026Задача: 1332. Remove Palindromic Subsequences Сложность: easy Вам дана строка s, состоящая…
  2. Oct 13, 2026Post #2296
  3. Oct 13, 2026Задача: 1120. Maximum Average Subtree Сложность: medium Дан корень бинарного дерева. Верни…
  4. Oct 13, 2026Post #2294
  5. Oct 12, 2026Задача: 1413. Minimum Value to Get Positive Step by Step Sum Сложность: easy Дан массив це…
  6. Oct 11, 2026Задача: 672. Bulb Switcher II Сложность: medium Есть комната с n лампочками, пронумерованн…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →