leetcode 23. Merge k Sorted Lists(Hard)
来源:互联网 发布:韩丽橱柜怎么样知乎 编辑:程序博客网 时间:2024/05/21 10:29
Problem :
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Algorithm:
本题为一个多路归并的问题,即将多个有序数组或链表(统称为序列)合并成为一个有序的序列。
回想归并排序中二路归并时我们的做法。我们从两个序列的头部元素开始比较(即当前下标为0),将较小者加入一个新的序列中,同时拥有较小元素序列的当前下标加1。每次比较的复杂度为O(1),总体复杂度为O(n)。
对于k路归并,我们同样可采用上述方法,即遍历所有序列,找出最小元素加入新序列,同时相应下标加1。该时间复杂度为O(kn)。
然而,该算法可以进行优化。因为查找最小元素的过程我们可以通过建堆来处理。这样,我们只需要用O(logk)的时间即可找到最小元素,因此,总时间复杂度可优化为O(nlogk)。
Code:
#include<iostream>#include<functional>#include<queue>using namespace std;/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */struct cmp{ bool operator ()(ListNode* n1, ListNode* n2){ return n1 -> val > n2 -> val; //最小值优先 } }; class Solution {public: ListNode* mergeKLists(vector<ListNode*>& lists) { ListNode* head = new ListNode(0); //建表头 ListNode* tp = head; priority_queue<ListNode*, vector<ListNode*>, cmp > que; //使非空链表表头元素进队 for(int i = 0; i < lists.size(); ++ i) { if(lists[i]) que.push(lists[i]); } while(que.size()) { ListNode* temp = que.top(); que.pop(); //将表头结点加入答案链表 tp -> next = temp; tp = tp -> next; //当前链表非空,则将下一结点推入队列 if(temp -> next) que.push(temp -> next); } tp = head -> next; //删表头 delete head; return tp; }};
0 0
- LeetCode 23. Merge k Sorted Lists 【hard】
- leetcode 23. Merge k Sorted Lists(Hard)
- LeetCode 23. Merge k Sorted Lists [hard]
- [Leetcode 23, Hard] Merge k Sorted Lists
- 【Hard】23. Merge k Sorted Lists
- 23. Merge k Sorted Lists Hard
- [LeetCode] 023. Merge k Sorted Lists (Hard) (C++/Java/Python)
- Leetcode OJ 23 Merge k Sorted Lists [Hard]
- leetcode 23. LeetCode Merge k Sorted Lists
- [LeetCode]23.Merge k Sorted Lists
- LeetCode --- 23. Merge k Sorted Lists
- LeetCode 23.Merge k Sorted Lists
- [Leetcode] 23. Merge k Sorted Lists
- 【LeetCode】23.Merge k Sorted Lists
- [leetcode] 23.Merge k Sorted Lists
- Leetcode-23.Merge k Sorted Lists
- [Leetcode]23. Merge k Sorted Lists @python
- leetcode 23. Merge k Sorted Lists
- 软导作业
- 微信开发接收事件推送
- 观察者模式-精简举例阐释
- Mybatis用法详解(配置和注解的使用)
- GBRT/GBDT算法实例
- leetcode 23. Merge k Sorted Lists(Hard)
- Oracle之用户创建,赋权限,赋表空间
- Activity之生命周期变化
- java中new一个对象的时候JVM都做了哪些事
- 80、54、84坐标系七参数转换算法及Java代码
- contiki学习的目录结构
- LeetCode | 4)Median of Two Sorted Arrays
- Cassandra Secondary Index 介绍
- 设计模式,六大设计原则,类的特性