Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads
Post #1837
297
Задача: 23. Merge k Sorted Lists
Сложность: medium
Вам дан массив из k списков связанных списков, каждый связанный список отсортирован в порядке возрастания. Объедините все связанные списки в один отсортированный связанный список и верните его.
Пример:
👨💻 Алгоритм:
1⃣Создаем min-кучу, где приоритетом будет минимальное значение узлов.
2⃣Помещаем в кучу первые элементы всех непустых списков.
3⃣Извлекаем минимальный элемент, добавляем в результат, и если у него есть следующий элемент — помещаем его в кучу.
😎 Решение:
Ставь 👍 и забирай 📚 Базу знаний
Сложность: medium
Вам дан массив из k списков связанных списков, каждый связанный список отсортирован в порядке возрастания. Объедините все связанные списки в один отсортированный связанный список и верните его.
Пример:
Input: lists = [[1,4,5],[1,3,4],[2,6]] Output: [1,1,2,3,4,4,5,6]
👨💻 Алгоритм:
1⃣Создаем min-кучу, где приоритетом будет минимальное значение узлов.
2⃣Помещаем в кучу первые элементы всех непустых списков.
3⃣Извлекаем минимальный элемент, добавляем в результат, и если у него есть следующий элемент — помещаем его в кучу.
😎 Решение:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class compare {
public:
bool operator()(ListNode* a, ListNode* b) {
return a->val > b->val;
}
};
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
if (lists.empty()) return NULL;
priority_queue<ListNode*, vector<ListNode*>, compare> minheap;
for (int i = 0; i < lists.size(); i++) {
if (lists[i] != NULL)
minheap.push(lists[i]);
}
ListNode* head = NULL;
ListNode* temp1;
while (!minheap.empty()) {
ListNode* temp = minheap.top();
minheap.pop();
if (head == NULL) {
head = temp;
temp1 = temp;
} else {
temp1->next = temp;
temp1 = temp;
}
if (temp->next != NULL) {
minheap.push(temp->next);
}
}
if (temp1 != NULL)
temp1->next = NULL;
return head;
}
};
Ставь 👍 и забирай 📚 Базу знаний
- 👍 1





