23. Merge k Sorted Lists
来源:互联网 发布:高三毕业后干什么知乎 编辑:程序博客网 时间:2024/06/05 17:35
原本想找一篇与分治策略有关的题目,便搜索了merge类的题目挑一篇做。
题目是Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
大意是将K个已经排好序的链表合并成一个链表。一开始打算运用分治法将其一分二,二分四分成n个基本子问题来求解,但由于链表头储存在向量中,设想难以实现,最后采取循环的方式两两合并,代码如下:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* mergeKLists(vector<ListNode*>& lists) { if(lists.empty()) return NULL; while(lists.size() > 1) { lists.push_back(merge(lists[0], lists[1])); lists.erase(lists.begin()); lists.erase(lists.begin()); } return lists.front(); } ListNode* merge(ListNode* a, ListNode* b) { if(b == NULL) return a; else if(a == NULL) return b; else { ListNode* res; if(a-> val <= b->val) { res = a; sort(a, b); } else { res = b; sort(a, b); } return res; } } void sort(ListNode*a, ListNode* b) { while(a != NULL && b != NULL) { if(a->val <= b->val) { ListNode* temp = a->next; if(a->next != NULL) a->next = (a->next->val <= b->val)?a->next:b; else a->next = b; a = temp; } else { ListNode* temp = b->next; if(b->next != NULL) b->next = (b->next->val < a->val)?b->next:a; else b->next = a; b = temp; } } }};
个人编写的merge和sort函数略复杂,有大神用仅仅几行的代码就可以替代这两个函数
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) { if(l1 == nullptr){ return l2; } if(l2 == nullptr){ return l1; } if(l1->val <= l2->val){ l1->next = mergeTwoLists(l1->next, l2); return l1; } else{ l2->next = mergeTwoLists(l1, l2->next); return l2; }}
阅读全文
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
- java io
- myBatis 一对一 和一对多映射
- Java中 equals() 和 ==的区别
- js个人笔记
- 习题8-6 删除字符
- 23. Merge k Sorted Lists
- Haproxy 8种算法+Session共享
- 浅尝Java 数组
- MongoDB高可用集群配置的方案-对称集群(一致对外)与非对称集群(只有我对外,其它待命)
- 设计模式之工厂方法模式
- 0014_Longest Common Prefix
- 【iOS沉思录】NSTimer你真的会用了吗
- 不太好找的前端资源angular-ui-router.min.js 1.0.3
- 第30课:Master的注册机制和状态管理解密 课堂笔记