LeetCode--Merge k Sorted Lists
来源:互联网 发布:中国统计局数据库 编辑:程序博客网 时间:2024/06/04 23:25
题意:Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
题解:建立一个大小为k的最小堆,即堆顶存放最小元素,因为k个链表已排好序,借鉴归并排序的技巧,先取出堆顶的元素,再放入堆顶元素所在链表的表头的元素,再维持最小堆循环迭代。
注意直接链表存入会导致逆序,可以先存入vector,再逆序存入链表。
代码如下:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: int insertNode(ListNode** head,int val) { ListNode* newNode = new ListNode(val); newNode->next = *head; *head = newNode; return 0; } class qNode{ public: int val; int index; friend bool operator<(qNode a,qNode b){ return a.val > b.val; //val小的优先级高,先从queue pop出来 } }; ListNode *mergeKLists(vector<ListNode *> &lists) { priority_queue<qNode> q; vector<int> tmp; qNode now,next; ListNode* head = NULL; for(int i = 0;i < lists.size();i++){ if(lists[i] != NULL){ now.val = lists[i]->val; lists[i] = lists[i]->next; now.index = i; q.push(now); } } while(!q.empty()){ now = q.top(); q.pop(); tmp.push_back(now.val); if(lists[now.index] != NULL){ next.val = lists[now.index]->val; next.index = now.index; q.push(next); lists[now.index] = lists[now.index]->next; } } for(int i = tmp.size()-1;i >= 0;i--) { insertNode(&head,tmp[i]); } 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
- 关于程序员的工作效率
- 如何将ppt转变成pdf格式
- 图片缩放和单击
- c++中vector的使用方法
- 取上下行数据分析函数lag()和lead()
- LeetCode--Merge k Sorted Lists
- 关于No suitable driver found for com.mysql.jdbc.Driver问题的解决办法
- 胸怀大海,敢想敢做
- Android类动态加载技术
- C++中vector的使用
- 设计模式学习(五) -- 装饰者模式 Decorator Pattern
- 糟糕的程序员抵不过一款好工具
- opencv 学习
- 关于 PHP7 你必须知道的五件事