TGViewer
Android Mobile | YeaHub Android Mobile | YeaHub @yeahub_android_mobile · 431 subscribers
Post #35 107
#ЛитКод
Задача: 632. Smallest Range Covering Elements from K Lists

У вас есть 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

data class Element(val value: Int, val row: Int, val col: Int)

class Solution {
fun smallestRange(nums: List<List<Int>>): IntArray {
val minHeap = PriorityQueue<Element> { a, b -> a.value - b.value }
var maxValue = Int.MIN_VALUE

for (i in nums.indices) {
minHeap.add(Element(nums[i][0], i, 0))
maxValue = maxOf(maxValue, nums[i][0])
}

var rangeStart = 0
var rangeEnd = Int.MAX_VALUE

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

if (minElement.col + 1 < nums[minElement.row].size) {
val value = nums[minElement.row][minElement.col + 1]
minHeap.add(Element(value, minElement.row, minElement.col + 1))
maxValue = maxOf(maxValue, value)
}
}

return intArrayOf(rangeStart, rangeEnd)
}
}


👉Новости 👉Платформа
  • ❤ 2
More from @yeahub_android_mobile
  1. Oct 12, 2026#Собес #viewholder #recycling #oncreateviewholder 🤔 Как RecyclerView рендерит элементы? �…
  2. Oct 9, 2026#podcast #всё 📚 TeachMeSkills IT-школа Это серия выпусков от "TeachMeSkills Школа програм…
  3. Oct 8, 2026#Собес #docker_volumes #persistent_data #storage 🤔 Какова цель томов в Docker? 💬 Кратко:…
  4. Oct 7, 2026#Собес #viewholder #recycling #oncreateviewholder 🤔 Как RecyclerView рендерит элементы? �…
  5. Oct 5, 2026#Собес #service_main_thread #background #anr 🤔 В каком потоке по умолчанию работает Servi…
  6. Oct 2, 2026#tool #графы 📚 Терялся в собственном коде? Встречай Gitvizz, инструмент, который мгновенн…
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 →