23. Merge k Sorted Lists
来源:互联网 发布:天命神童 知乎 编辑:程序博客网 时间:2024/06/14 10:17
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
合并k个有序的链表,我们假设每个链表的平均长度是n。
#include "MergeKSortedLists.h"//方法一:两两合并ListNode* MergeKSortedLists::mergeKLists1(vector<ListNode*>& lists){ if (lists.size() == 0) return NULL; ListNode *res = lists[0]; for (int i = 1; i < lists.size(); i++) { //两两合并 res = merge2lists(res, lists[i]); } return res;}/*方法二:利用分治的思想把合并k个链表分成两个合并k/2个链表的任务,一直划分,知道任务中只剩一个链表或者两个链表。可以很简单的用递归来实现。因此算法复杂度为T(k) = 2T(k/2) + O(nk),很简单可以推导得到算法复杂度为O(nklogk)*/ListNode* MergeKSortedLists::mergeKLists2(vector<ListNode*>& lists){ int n = lists.size(); if (n == 0) return NULL; while (n > 1) { int k = (n + 1) / 2; for (int i = 0; i < n / 2; i++) { lists[i] = merge2lists(lists[i], lists[i + k]); } n = k; } return lists[0];}ListNode *MergeKSortedLists::merge2lists(ListNode *head1, ListNode*head2){ ListNode node(0), *res = &node; while (head1 && head2) { if (head1->val <= head2->val) { res->next = head1; head1 = head1->next; } else { res->next = head2; head2 = head2->next; } res = res->next; } if (head1) { res->next = head1; } else if (head2) { res->next = head2; } return node.next;}
阅读全文
0 0
- 23. Merge k Sorted Lists
- 23.Merge K Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23.Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23.Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 读《富爸爸,穷爸爸》
- 【图像特征提取1】方向梯度直方图HOG---从理论到实践------附带积分图像的解析
- 前端知识整理之CSS盒模型
- C语言程序设计17通信 第一章作业
- C语言 归并排序
- 23. Merge k Sorted Lists
- 在Ubuntu下利用anaconda安装pytorch
- 常用sql查询语句
- ASCII码表
- yii2添加module配置和常见问题解决
- java读取Excel —— XSSFWorkbook 找不到该类
- 常见错误码
- JDBC使用c3p0连接池疑问
- LinkedHashMap源碼詳細解析(來自動腦VIP課程資料)