【leetcode】Merge k Sorted Lists
来源:互联网 发布:vue.js chrome插件 编辑:程序博客网 时间:2024/06/13 21:40
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
O(N * logK)
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode **g_lists;int g_num;#define max_num 10000struct ListNode *g_heap[max_num];int heap_num;void rebuildHeap(int i) { int left = i * 2 + 1; int right = i * 2 + 2; if (left >= heap_num) { return; } int min = i; if (g_heap[i]->val > g_heap[left]->val) { min = left; } if (right < heap_num && g_heap[min]->val > g_heap[right]->val) { min = right; } if (min == i) { return; } struct ListNode *tmp = g_heap[i]; g_heap[i] = g_heap[min]; g_heap[min] = tmp; rebuildHeap(min);}void makeHeap() { for (int i = heap_num / 2; i >= 0; --i) { rebuildHeap(i); }}struct ListNode *pickOne() { if (heap_num == 0) { return NULL; } struct ListNode *min = g_heap[0]; if (min->next == NULL) { heap_num--; g_heap[0] = g_heap[heap_num]; } else { g_heap[0] = g_heap[0]->next; } rebuildHeap(0); min->next = NULL; return min;}struct ListNode *mergeKLists(struct ListNode *lists[], int k) { if (k == 0) { return NULL; } if (k == 1) { return lists[0]; } g_num = k; g_lists = lists; heap_num = 0; for (int i = 0; i < g_num; ++i) { if (g_lists[i] != NULL) { g_heap[heap_num++] = g_lists[i]; } } makeHeap(); struct ListNode *head = NULL; struct ListNode *cur = NULL; struct ListNode *p = NULL; while ((p = pickOne()) != NULL) { if (head == NULL) { head = p; } else { cur->next = p; } cur = p; } return head;}
0 0
- LeetCode: Merge k Sorted Lists
- LeetCode Merge k Sorted Lists
- LeetCode: Merge k Sorted Lists
- [Leetcode] Merge k Sorted Lists
- [Leetcode] Merge k Sorted Lists
- [Leetcode] Merge K sorted lists
- [LeetCode]Merge k Sorted Lists
- [LeetCode] Merge k Sorted Lists
- LeetCode-Merge k Sorted Lists
- LeetCode: Merge k Sorted Lists
- LeetCode - Merge k Sorted Lists
- LeetCode | Merge k Sorted Lists
- 【leetcode】Merge k Sorted Lists
- Leetcode: Merge k Sorted Lists
- <Leetcode>Merge k Sorted Lists
- [LeetCode] Merge K sorted lists
- [LeetCode] Merge k Sorted Lists
- 【Leetcode】Merge k Sorted Lists
- 蓝桥杯---矩形运算(求相交部分)
- 《精通Linux设备驱动程序开发》——块设备驱动程序
- 【反汇编分析】函数栈帧
- 柴郡猫技术--C++中的PIMPL设计模式
- 第三周项目 2 测试与设计
- 【leetcode】Merge k Sorted Lists
- [POJ3922]Now解题报告
- Annotation笔记
- BZOJ 2152 (树形DP)
- oc中不允许方法重载
- 逆序对的求法 归并排序
- Codeforces 296B Yaroslav and Two Strings dp+容斥(入门
- Python函数小结(2)-- 装饰器、 lambda
- android 常用URI 值得记住